Django drf-spectacular 如何拆分 api 描述以供公共(public)和私有(private)使用?

标签 django drf-spectacular

我想制作 2 个不同的文档。一个是面向公众的,只有很少的 api 方法并且没有 authz。另一个用于所有 api 方法的私有(private)使用,并且仅供授权用户使用。

最佳答案

2个选择:

  1. 如果您使用内置的 Swagger,并且访问 UI 的用户以某种方式被授权,您可以使用设置 'SERVE_PUBLIC': False。它将根据请求用户有权访问的权限过滤架构。 Spectacular 将尝试使用 Authorize 按钮提供的(第一个)凭据并使用它获取模式。如果您的身份验证方法不同于 DRF 的设置 AUTHENTICATION_CLASSES,您可能还需要相应地设置 spectacular 的 SERVE_AUTHENTICATION

  2. 或者实际创建 2(+2) 个服务于不同模式的端点并可能自定义它们

# public part
path('api/schema/swagger-ui-public/', SpectacularSwaggerView.as_view(
    custom_settings={
        'SERVE_URLCONF': [...] # urlpatterns with the public endpoint list
    },
    url_name='schema-public')
),
path('api/schema-public/', SpectacularAPIView.as_view(), name='schema-public'),
    
# private part
path('api/schema-private/', SpectacularAPIView.as_view(
      # settings deviating from global spectacular settings go here.
      custom_settings={
          'TITLE': 'Private API',
          'SERVE_URLCONF': [...] # urlpatterns with the private endpoint list
          ...
      },
      # not required but might want to also protect if it is sensitive
      authentication_classes=[...],
      permission_classes=[...],
  ), name='schema-private'
),
path('api/schema/swagger-ui-private/', SpectacularSwaggerView.as_view(url_name='schema-private')),

关于Django drf-spectacular 如何拆分 api 描述以供公共(public)和私有(private)使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70034383/

相关文章:

python - 如何在 Django View 中获取特定字段的 ForeignKey 值

python - 我的第一个 Django 应用程序 - 不知道如何创建主页

django - python : can't open file 'manage.py' : [Errno 2] No such file or directory

python - 如何在 django-admin 中显示外键的选择?

python - 如何在 drf-spectaulous 中包含 400 个验证错误?

django - DRF 壮观没有发现自定义身份验证扩展类

django - 如何使用 `drf-spectacular` 记录 ViewSet 的各个操作?

python - 将地理位置坐标插入 Django 元表单字段