有一個很難配置揚鞭UI 這裏是很說明文檔:https://django-rest-swagger.readthedocs.io/en/latest/Django的REST框架揚鞭2.0
YAML文檔字符串已被棄用。有人知道如何從Python代碼中配置Swagger UI嗎?或者我應該更改哪個文件以對api端點進行組合,向每個端點添加註釋,在Swagger UI中添加查詢參數字段?
有一個很難配置揚鞭UI 這裏是很說明文檔:https://django-rest-swagger.readthedocs.io/en/latest/Django的REST框架揚鞭2.0
YAML文檔字符串已被棄用。有人知道如何從Python代碼中配置Swagger UI嗎?或者我應該更改哪個文件以對api端點進行組合,向每個端點添加註釋,在Swagger UI中添加查詢參數字段?
這是我成功地做到這一點:
基地urls.py
urlpatterns = [
...
url(r'^api/', include('api.urls', namespace='api')),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
...
]
api.urls.py
urlpatterns = [
url(r'^$', schema_view, name='swagger'),
url(r'^article/(?P<pk>[0-9]+)/$',
ArticleDetailApiView.as_view(actions={'get': 'get_article_by_id'}),
name='article_detail_id'),
url(r'^article/(?P<name>.+)/(?P<pk>[0-9]+)/$',
ArticleDetailApiView.as_view(actions={'get': 'get_article'}),
name='article_detail'),
]
api.views.py。在MyOpenAPIRenderer中,我更新數據字典以添加說明,查詢字段並更新類型或所需功能。
Django的休息,招搖(2.0.7)class MyOpenAPIRenderer(OpenAPIRenderer):
def add_customizations(self, data):
super(MyOpenAPIRenderer, self).add_customizations(data)
data['paths']['/article/{name}/{pk}/']['get'].update(
{'description': 'Some **description**',
'parameters': [{'description': 'Add some description',
'in': 'path',
'name': 'pk',
'required': True,
'type': 'integer'},
{'description': 'Add some description',
'in': 'path',
'name': 'name',
'required': True,
'type': 'string'},
{'description': 'Add some description',
'in': 'query',
'name': 'a_query_param',
'required': True,
'type': 'boolean'},
]
})
# data['paths']['/article/{pk}/']['get'].update({...})
data['basePath'] = '/api'
@api_view()
@renderer_classes([MyOpenAPIRenderer, SwaggerUIRenderer])
def schema_view(request):
generator = SchemaGenerator(title='A title', urlconf='api.urls')
schema = generator.get_schema(request=request)
return Response(schema)
class ArticleDetailApiView(ViewSet):
@detail_route(renderer_classes=(StaticHTMLRenderer,))
def get_article_by_id(self, request, pk):
pass
@detail_route(renderer_classes=(StaticHTMLRenderer,))
def get_article(self, request, name, pk):
pass
更新:僅更換add_customizations與get_customizations。
views.py
class MyOpenAPIRenderer(OpenAPIRenderer):
def get_customizations(self):
data = super(MyOpenAPIRenderer, self).get_customizations()
data['paths'] = custom_data['paths']
data['info'] = custom_data['info']
data['basePath'] = custom_data['basePath']
return data
可以讀取swagger specification創建自定義的數據。
所以,看起來發生了什麼事情,但是它已經不完整,並且缺少從代碼文檔中生成操作描述的能力,並且在3.5.0中有open issue about it。
與此同時,django-rest-swagger繼續前進並更新了他們的代碼,以便與新的SchemaGenerator一起工作,現在使其成爲breaking change。
非常奇怪的一系列事件導致了這一點):希望這將很快得到解決。現在,提出的答案是唯一的選擇。
因爲我無法找到任何可行的選擇here我只是創建了自己的SchemaGenerator,像這樣:
from rest_framework.schemas import SchemaGenerator
class MySchemaGenerator(SchemaGenerator):
title = 'REST API Index'
def get_link(self, path, method, view):
link = super(MySchemaGenerator, self).get_link(path, method, view)
link._fields += self.get_core_fields(view)
return link
def get_core_fields(self, view):
return getattr(view, 'coreapi_fields',())
創建招搖觀點:
from rest_framework.permissions import AllowAny
from rest_framework.renderers import CoreJSONRenderer
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework_swagger import renderers
class SwaggerSchemaView(APIView):
_ignore_model_permissions = True
exclude_from_schema = True
permission_classes = [AllowAny]
renderer_classes = [
CoreJSONRenderer,
renderers.OpenAPIRenderer,
renderers.SwaggerUIRenderer
]
def get(self, request):
generator = MySchemaGenerator()
schema = generator.get_schema(request=request)
return Response(schema)
使用這一觀點在urls.py :
url(r'^docs/$', SwaggerSchemaView.as_view()),
在APIView中添加一個自定義字段:
class EmailValidator(APIView):
coreapi_fields = (
coreapi.Field(
name='email',
location='query',
required=True,
description='Email Address to be validated',
type='string'
),
)
def get(self, request):
return Response('something')
謝謝你這麼多! –
不客氣:) – Lucianovici
使用所提出的解決方案是一個有點哈克但工作得很好,一個可能面臨實施提出的解決方案的幾個問題,但是這個文檔解釋了Django的休息招搖2集成以及這些問題所面臨一步一步: Django Rest Swagger 2 comprehensive documentation
很晚,但它可以幫助現在正在尋找幫助的人。
你有沒有想要做的分組的例子,例如在另一個基於Swagger的API上? Swagger在分組方面可能相當有限 - 我寫了定製的模板來完成此操作。我想象的評論是從端點方法的docstrings中添加的。如果查詢參數被正確定義,應該會出現查詢參數......儘管我依稀記得有些情況下他們沒有。 – Steve