Django REST Framework Swagger 2.0
avoir du mal à configurer Swagger UI Voici les documents très explicatifs:1-->https://django-rest-swagger.readthedocs.io/en/latest/
les cordons de YAML sont dépréciés. Quelqu'un sait-il comment configurer Swagger UI à partir du code python? ou quel fichier dois-je modifier pour grouper les paramètres de l'api, pour ajouter des commentaires à chaque paramètre, pour ajouter des champs de paramètres dans Swagger UI?
4 réponses
C'est comment j'ai réussi à le faire:
base 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. Dans MyOpenAPIRenderer je mets à jour le dict de données pour ajouter la description, les champs de requête et pour mettre à jour le type ou les caractéristiques requises.
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
mise à jour pour django-reste-swagger (2.0.7): remplacez add_customizations avec 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
Vous pouvez lire les spécification swagger pour créer des données personnalisées.
il semble donc que ce qui s'est passé est django-rest-frameowrk ajout du Nouveau SchemeGenerator, mais il est à moitié cuit et manque la capacité de générer des descriptions d'action à partir de Docs de code, et avoir un ouvrir une question à ce sujet, en raison de 3.5.0.
pendant ce temps, django-rest-swagger a mis à jour leur code pour travailler avec le nouveau SchemaGenerator, ce qui en fait un briser le changement pour l'instant.
série d'événements très bizarres conduit à la présente ): espérons que ce sera bientôt résolue. pour l'instant, la réponse proposée est la seule option.
puisque je n'ai pas pu trouver d'option viable ici j'ai simplement créé mon propre SchemaGenerator, comme ceci:
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', ())
Créé le swagger vue:
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)
utilisez cette vue urls.py:
url(r'^docs/$', SwaggerSchemaView.as_view()),
Ajouter un champ personnalisé dans un 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')
L'utilisation de la solution proposée est un peu hacky mais fonctionne bien, on peut faire face à peu de problèmes de mise en œuvre de la solution proposée mais ce doc explique l'intégration django rest swagger 2 ainsi que les problèmes rencontrés étape par étape: Django Reste Swagger 2 documentation complète
beaucoup plus tard, mais cela peut aider quelqu'un qui cherche de l'aide maintenant.