簡體   English   中英

在 drf-yasg 中設置自定義 basePath

[英]set custom basePath in drf-yasg

我正在使用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。

這里我想要兩個basePath

  1. /api/v1/public/用於public_schema_view
  2. /api/v1/private/用於private_schema_view

那么,問題是,如何在drf-yasg中設置多個自定義basePath

您可以通過覆蓋模式生成器 classget_schema(...)方法來設置basePath ,它可以通過使用generator_class參數在get_schema_view(...) function 中使用。

模式生成器 class 可以通過繼承drf_yasg.generators.OpenAPISchemaGenerator class 來創建,

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'),
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM