Metadata - Django REST framework

元数据-Django REST框架

metadata.py

元数据

[OPTIONS方法允许客户端确定与资源相关的选项和/或需求,或服务器的功能,而无需暗示资源操作或启动资源检索。

RFC 7231,第4.3.7节。

REST框架包括一种可配置的机制,用于确定您的api应该如何响应OPTIONS请求。这允许您返回API架构或其他资源信息。

目前还没有任何广泛采用的关于HTTP应该返回什么样的响应样式的约定OPTIONS请求,所以我们提供一种临时样式,返回一些有用的信息。

下面是一个示例响应,它演示默认返回的信息。

HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json

{
    "name": "To Do List",
    "description": "List existing 'To Do' items, or create a new item.",
    "renders": [
        "application/json",
        "text/html"
    ],
    "parses": [
        "application/json",
        "application/x-www-form-urlencoded",
        "multipart/form-data"
    ],
    "actions": {
        "POST": {
            "note": {
                "type": "string",
                "required": false,
                "read_only": false,
                "label": "title",
                "max_length": 100
            }
        }
    }
}

设置元数据方案

可以全局设置元数据类。'DEFAULT_METADATA_CLASS'设置键:

REST_FRAMEWORK = {
    'DEFAULT_METADATA_CLASS': 'rest_framework.metadata.SimpleMetadata'
}

也可以为视图单独设置元数据类:

class APIRoot(APIView):
    metadata_class = APIRootMetadata

    def get(self, request, format=None):
        return Response({
            ...
        })

REST框架包仅包含一个元数据类实现,名为SimpleMetadata...如果要使用另一种样式,则需要实现自定义元数据类。

创建模式端点

如果您有创建常规访问的架构端点的特定要求GET请求时,您可能会考虑重新使用元数据API进行此操作。

例如,可以在视图集中使用以下附加路由来提供可链接的架构终结点。

@action(methods=['GET'], detail=False)
def schema(self, request):
    meta = self.metadata_class()
    data = meta.determine_metadata(request, self)
    return Response(data)

您可以选择采用这种方法的原因有几个,包括OPTIONS回应不可缓存.


自定义元数据类

如果要提供自定义元数据类,则应重写BaseMetadata并实现determine_metadata(self, request, view)方法。

您可能想要做的有用的事情包括使用如下格式返回模式信息JSON模式,或者将调试信息返回给管理用户。

下面的类可用于将返回的信息限制为OPTIONS请求。

class MinimalMetadata(BaseMetadata):
    """
    Don't include field and other information for `OPTIONS` requests.
    Just return the name and description.
    """
    def determine_metadata(self, request, view):
        return {
            'name': view.get_view_name(),
            'description': view.get_view_description()
        }

然后将设置配置为使用此自定义类:

REST_FRAMEWORK = {
    'DEFAULT_METADATA_CLASS': 'myproject.apps.core.MinimalMetadata'
}

第三方包

以下第三方包提供了额外的元数据实现。

drf-模式适配器

drf-模式适配器是一组工具,它使向前端框架和库提供模式信息变得更加容易。它提供了一个元数据混合体以及两个元数据类和几个适合于生成的适配器。json模式以及各种库可读的架构信息。

您还可以编写自己的适配器来处理特定的前端。如果您希望这样做,它还提供了一个导出程序,可以将这些模式信息导出到json文件中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QMQ2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值