【问题标题】:Django Rest Framework custom schema for view in viewset视图集中视图的 Django Rest Framework 自定义模式
【发布时间】: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 的这一部分?

标签: python django python-3.x django-rest-framework


【解决方案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 来装饰它们......似乎有限制。你有例子可以分享吗?
  • 哦,我明白你的意思了。不,抱歉,我现在没有其他想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 2014-07-06
  • 1970-01-01
  • 2018-12-12
  • 1970-01-01
  • 1970-01-01
  • 2016-09-30
相关资源
最近更新 更多