#python #django #django-rest-framework #swagger #drf-yasg
#питон #джанго #django-rest-фреймворк #развязность #drf-yasg
Вопрос:
В моем проекте у меня есть конечные точки api/v1, которые я хочу показать в виде отдельной схемы. Проблема в том, что использование дополнительного schema_view с шаблонами URL api/v1 уничтожает префикс маршрутизатора. Как я могу его сохранить? Вот код для urls.py основного приложения и скриншоты приведенных чванств:
кодекс action_fm/urls.py (основное применение)
from django.contrib import admin from django.urls import include, path from drf_yasg import openapi from drf_yasg.views import get_schema_view from rest_framework import permissions from action.urls import notify_router from action_fm.views import HealthView, api_root api_v1_urlpatterns = [ path("", include([path("", include(notify_router.urls))])), ] schema_view = get_schema_view( openapi.Info(title="Action FM Swagger", default_version="v1", description="API description for Action FM"), public=True, permission_classes=(permissions.AllowAny,), patterns=api_v1_urlpatterns, ) schema_view_common = get_schema_view( openapi.Info(title="Action FM Swagger", default_version="v1", description="API description for Action FM"), public=True, permission_classes=(permissions.AllowAny,), ) urlpatterns = [ path("api/v1/", include(api_v1_urlpatterns)), path("", include("django.contrib.auth.urls")), path("", api_root), path("api-auth", include("rest_framework.urls", namespace="rest_framework")), path("health", HealthView.as_view(), name="health"), path( "swagger/v1", schema_view.with_ui("swagger", cache_timeout=0), name="schema-swagger-ui-v1" ), # for correct logically separated api endpoints to try path("swagger/common", schema_view_common.with_ui("swagger", cache_timeout=0), name="schema-swagger-ui-common"), path("grappelli/", include("grappelli.urls")), path("admin/", admin.site.urls), ]
кодекс action/urls.py (другое приложение, здесь я храню свой маршрутизатор)
from rest_framework import routers from action.views import NotificationHandlerViewSet notify_router = routers.DefaultRouter(trailing_slash=True) notify_router.register(r"notify", NotificationHandlerViewSet, basename="notify")
вот скриншот правильного общего чванства, которое сохраняет префикс «уведомлять/» в URL
а вот неверный чванливый api/v1, который потерял необходимый префикс «уведомлять» (((
Ответ №1:
Похоже, что drf_yasg не теряет префикс «уведомлять», он просто сохранен как базовый путь в схеме swagger, поэтому, если я добавлю другой URL-адрес в urlconf api v1, все префиксы будут отображаться правильно