视图集中视图的 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 REST 框架组的权限

如何在 Django 中配置 X-Frame-Options 以允许 iframe 嵌入一个视图?

Django REST framework视图

有啥方法可以更改登录的 Django-rest-auth 视图?

Django + AngularJS:没有使用普通 URL 和视图的 Django REST 框架的类 REST 端点?