с drf-yasg, как поставить шаблоны? - PullRequest
0 голосов
/ 17 декабря 2018

Я установил drf-yasg, и он отлично работает.У меня проблема в том, что это большое приложение с огромным количеством конечных точек для каждого типа клиентского интерфейса, то есть /admin/v1, /app/v1, ...

Так что я подумал, чтобыло бы неплохо разделить документацию для каждого типа, то есть

urlpatterns += [
     url(r'^/admin/swagger/$', admin_schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
     url(r'^/app/swagger/$', app_schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
]

Так что, похоже, что drf-yasg поддерживает это, передав patterns в get_scheme_view:

admin_schema_view = get_schema_view(
    openapi.Info(
        title="API",
        default_version='v1',
        description="The set of API endpoints used.",
        terms_of_service="https://www.google.com/policies/terms/",
        contact=openapi.Contact(email="contact@me"),
        license=openapi.License(name="BSD License"),
    ),
    patterns=?????,
    validators=['flex', 'ssv'],
    public=True,
    permission_classes=(permissions.AllowAny,),
)

Теперь я предполагал предоставить строку, так же, как и первую строку при определении urls, например, patterns=r'^admin/v1/',, что приводит к:

File "/usr/local/lib/python3.6/dist- packages/rest_framework/compat.py", line 55, in get_original_route
return urlpattern.regex.pattern
AttributeError: 'str' object has no attribute 'regex'

То есть с документацией на drf-yasg docs :

шаблоны - если даны, только эти шаблоны будут перечислены для включения в спецификацию API

Точно, какой тип объекта необходим здесь для обработкиpatterns?Я попытался просмотреть django-rest-framework и исходный код Django на github, но не смог найти, какой тип на самом деле нужен, они оба очень большие проекты.

1 Ответ

0 голосов
/ 17 декабря 2018

После некоторых экспериментов я обнаружил, что шаблоны ожидают, что это список шаблонов URL, а не просто стандартная строка регулярных выражений Python.Это должен быть точно такой же стандарт django urlpatterns в urls.py.

. Итак, если вы импортировали шаблоны URL-адресов API администрирования как admin_urlpatterns, все, что вам нужно, это указать в опции шаблонов

admin_schema_view = get_schema_view(
openapi.Info(
    title="API",
    default_version='v1',
    description="The set of API endpoints used.",
    terms_of_service="https://www.google.com/policies/terms/",
    contact=openapi.Contact(email="contact@me"),
    license=openapi.License(name="BSD License"),
),
patterns=admin_urlpatterns,
validators=['flex', 'ssv'],
public=True,
permission_classes=(permissions.AllowAny,),
)

Определенно трудно было найти какой-либо пример, и они, возможно, захотят включить яркий пример в документы

...