视图集中视图的 Django Rest Framework 自定义模式
Posted
技术标签:
【中文标题】视图集中视图的 Django Rest Framework 自定义模式【英文标题】:Django Rest Framework custom schema for view in viewset 【发布时间】:2018-10-18 18:51:39 【问题描述】:我有一个使用 Django 和 Django REST Framework 构建的 API。我有一个模型,它返回一些与典型 Django 模型不对应的构建的 JSON。因此,似乎利用 Django 模型知识的自动文档功能不适用于我的某些观点。
特别是,我有一个返回一些典型 API 视图(如对象列表)的视图集,以及一些返回我的一些自定义对象的视图。我想为这些自定义对象构建文档,但我不确定如何覆盖视图集中特定端点的架构。如何覆盖为 DRF 视图集中的单个视图生成的架构?
DRF seems to provide this functionality for views,但我想对 Viewsets 做同样的事情。
【问题讨论】:
您找到解决方案了吗? 我没有。我最终自己构建了自定义文档。 啊,谢谢。自定义文档是完全独立的文档还是仅使用 DRF 中的 coreapi/schema 的这一部分? 【参考方案1】:好的,经过多次尝试失败重试,我终于让它工作了——你失去了一些自动(神奇的)自省,比如id
路径参数和从文档字符串中获取的描述,但我还是值得的:
custom_schema = ManualSchema(
fields=[
coreapi.Field(
"id",
required=True,
location="path",
schema=coreschema.String(
title="ID",
description="Foobar ID.",
)
),
coreapi.Field(
"foobar",
location="query",
schema=coreschema.String(
title="Foobar",
description="Foobar?",
)
),
],
description="Foobar!",
)
class FoobarViewSet(viewsets.ReadOnlyModelViewSet):
@action(methods=["get"], detail=True, schema=custom_schema)
def foobar(self, request, id=None):
...
【讨论】:
如何为列表、获取等内置视图执行此操作? 您可以重新定义它们,装饰它们,并返回它们与super()
完全相同的内容
就是这样,你不能用action
来装饰它们......似乎有限制。你有例子可以分享吗?
哦,我明白你的意思了。不,抱歉,我现在没有其他想法。以上是关于视图集中视图的 Django Rest Framework 自定义模式的主要内容,如果未能解决你的问题,请参考以下文章
在 Django Rest Framework 中生成 OpenAPI Schema:更新视图集中的 URL 关键字
如何在 Django 中配置 X-Frame-Options 以允许 iframe 嵌入一个视图?
有啥方法可以更改登录的 Django-rest-auth 视图?
Django + AngularJS:没有使用普通 URL 和视图的 Django REST 框架的类 REST 端点?