Swagger UIの設定に苦労していますここに、非常に説明的なドキュメントがあります。 https://Django-rest-swagger.readthedocs.io/en/latest/
YAML docstringは非推奨です。 pythonコード?)からSwagger UIを構成する方法、またはSwapi 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で、データディクショナリを更新して、説明、クエリフィールドを追加し、タイプまたは必要な機能を更新します。
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
Django-rest-swagger(2.0.7)の更新: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仕様 を読んで、カスタムデータを作成できます。
だから、起こったのはDjango-rest-frameowrk 新しいSchemeGeneratorを追加 であるようですが、それは中途半端で、コードドキュメントからアクションの説明を生成する機能がなく、 それについての未解決の問題 、3.5.0で期限切れ。
その間、Django-rest-swaggerは先に進み、新しいSchemaGeneratorで動作するようにコードを更新しました。これにより、現時点では 重大な変更 になります。
これにつながる非常に奇妙な一連のイベント):これがすぐに解決されることを願っています。現時点では、提案された回答が唯一の選択肢です。
[〜#〜] edit [〜#〜]-Swaggerバージョン2.2.0およびRESTフレームワーク3.9.2以降、次のようなカスタムスキーマが作成されます。
from rest_framework.schemas import AutoSchema
class CustomSchema(AutoSchema):
def get_link(self, path, method, base_url):
link = super().get_link(path, method, base_url)
link._fields += self.get_core_fields()
return link
def get_core_fields(self):
return getattr(self.view, 'coreapi_fields', ())
次に、DEFAULT_SCHEMA_CLASS
設定。
REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'common.schema.CustomSchema',
}
!以下のアプローチは廃止されました。
実行可能なオプションが見つからなかったので 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', ())
Swaggerビューを作成しました。
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')
提案されたソリューションの使用は少しハックですが、うまく機能します。提案されたソリューションの実装でいくつかの問題に直面する可能性がありますが、このドキュメントではDjango Rest Swagger 2の統合と、段階的に直面する問題について説明します:- Django Rest Swagger 2の包括的なドキュメント
かなり遅いですが、今助けを探している人を助けるかもしれません。