元数据-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 = APIRootMetadatadef 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文件中。