【问题标题】:set custom basePath in drf-yasg在 drf-yasg 中设置自定义 basePath
【发布时间】:2020-07-29 15:18:14
【问题描述】:

我正在使用 drf-yasg 来记录我的 API,并且我有以下设置,

from django.urls import path
from drf_yasg.views import get_schema_view

public_schema_view = get_schema_view(..., urlconf='public_apis.urls')
private_schema_view = get_schema_view(..., urlconf='private_apis.urls')

urlpatterns = [
    path('public/', public_schema_view.with_ui('swagger', cache_timeout=0), name='schema-public'),
    path('private/', private_schema_view.with_ui('swagger', cache_timeout=0), name='schema-private'),
]

注意:public_schema_viewprivate_schema_view 分别从模块 public_apis.urlsprivate_apis.urls 重新生成了两组不同的 URL。

这里我要两个basePaths,

  1. /api/v1/public/ 代表 public_schema_view
  2. /api/v1/private/private_schema_view

那么,问题是,如何在drf-yasg 中设置多个自定义basePath

【问题讨论】:

    标签: python django django-rest-framework drf-yasg


    【解决方案1】:

    您可以通过覆盖模式生成器类get_schema(...)方法来设置basePath,并且可以在get_schema_view(...)函数中使用generator_class 论据。

    可以通过继承drf_yasg.generators.OpenAPISchemaGenerator类来创建模式生成器类,

    from django.urls import path
    from drf_yasg.views import get_schema_view
    from drf_yasg.generators import OpenAPISchemaGenerator
    
    
    class PublicAPISchemeGenerator(OpenAPISchemaGenerator):
        def get_schema(self, request=None, public=False):
            schema = super().get_schema(request, public)
            schema.base_path = '/api/v1/public/'
            return schema
    
    
    class PrivateAPISchemeGenerator(OpenAPISchemaGenerator):
        def get_schema(self, request=None, public=False):
            schema = super().get_schema(request, public)
            schema.base_path = '/api/v1/private/'
            return schema
    
    
    public_schema_view = get_schema_view(...,
                                         urlconf='public_apis.urls',
                                         generator_class=PublicAPISchemeGenerator)
    private_schema_view = get_schema_view(...,
                                          urlconf='private_apis.urls',
                                          generator_class=PrivateAPISchemeGenerator)
    
    urlpatterns = [
        path('public/', public_schema_view.with_ui('swagger', cache_timeout=0), name='schema-public'),
        path('private/', private_schema_view.with_ui('swagger', cache_timeout=0), name='schema-private'),
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-14
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 2022-11-02
      相关资源
      最近更新 更多