我已经安装了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'),
]
通过向patterns
中提供get_scheme_view
,看来drf-yasg支持了这一点:
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
需要什么类型的对象?我尝试在github上查看django-rest-framework和Django源代码,但是找不到实际需要的类型,它们都是非常大的项目。
答案 0 :(得分:1)
经过一些实验,我发现期望的模式是URL模式的列表,而不仅仅是标准的python regex字符串。它应该与urlpatterns
中的标准django urls.py
完全相同。
因此,假设您已将管理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,),
)
绝对很难找到任何示例,他们可能想在文档中包含生动的示例