[英]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_view
和private_schema_view
分別從模塊public_apis.urls
和private_apis.urls
中重新生成了兩組不同的 URL。
這里我想要兩個basePath
,
/api/v1/public/
用於public_schema_view
和/api/v1/private/
用於private_schema_view
您可以通過覆蓋模式生成器 class的get_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.