8 votes

Django Rest Swagger APIView

J'ai créé une API et je veux créer une documentation swagger. Je ne développe aucun sérialise pour cela.

Views.py

class DeliveryView(APIView):

    renderer_classes = (XMLRenderer,)

    def get_campaign_vast(self, request, *args):
        return response

    def get(self, request):
        return self.get_campaign_vast(request, data)

    def post(self, request):
        """ 
        This text is the description for this API
        ---
        param1 -- A first parameter
        param2 -- A second parameter
        """
        data = request.data
        return self.get_campaign_vast(request, data) 

urls.py

from django.conf.urls import url, include
from django.contrib import admin
from rest_framework_swagger.views import get_swagger_view

schema_view = get_swagger_view(title='Add Delivery')

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', schema_view),
    url(r'^', include('deliverymanagment.urls')),
]

Je veux obtenir tous les paramètres dans Swagger que je ne reçois pas.

je ne parviens pas à obtenir les paramètres

j'utilise:

django-rest-swagger==2.1.1

djangorestframework==3.5.3

5voto

Ragul Parani Points 367

La méthode get_swagger_view() ne vous permet pas de contrôler l'ajout de paramètres et de descriptions aux URLs de votre application

La solution à cela est d'utiliser une définition de schéma explicite. Vous pouvez créer un Document qui est une représentation du conteneur de schéma de l'API de base. Suivez le lien suivant. Lisez la section API de base

Générateur de schéma de l'API de base

Cela vous demandera de créer un schéma pour les URLs et les paramètres utilisés dans votre application.

Créez un fichier pour Swagger

swagger.py

from rest_framework.decorators import renderer_classes, api_view
from rest_framework_swagger.renderers import OpenAPIRenderer, SwaggerUIRenderer
import coreapi
from rest_framework import response
# noinspection PyArgumentList
@api_view()
@renderer_classes([SwaggerUIRenderer, OpenAPIRenderer])
def schema_view(request):
    print("---à l'intérieur de la vue du schéma-----")
    # noinspection PyArgumentList
    schema = coreapi.Document(
    title='Votre titre',
    url='Votre URL hôte',
    content={
        'search': coreapi.Link(
            url='/search/',
            action='get',
            fields=[
                coreapi.Field(
                    name='from',
                    required=True,
                    location='query',
                    description='Nom de la ville ou code de l\'aéroport.'
                ),
                coreapi.Field(
                    name='to',
                    required=True,
                    location='query',
                    description='Nom de la ville ou code de l\'aéroport.'
                ),
                coreapi.Field(
                    name='date',
                    required=True,
                    location='query',
                    description='Date du vol au format "AAAA-MM-JJ".'
                )
            ],
            description='Renvoie la disponibilité des vols et les prix.'
        )
    }
)
    # schema = generator.get_schema(request)
    return response.Response(schema)

Pour des explications sur coreapi.Document, coreapi.Field, coreapi.Link, veuillez vous référer au lien mentionné ci-dessus.

Créez l'URL pour la documentation Swagger :

urls.py

url('^docs', swagger.schema_view)

4voto

oden Points 956

Considérez plutôt utiliser le GenericAPIView car cela générera la documentation. C'est un peu une astuce d'utiliser cela lorsque le point de terminaison ne concerne pas un modèle, mais cela fonctionne.

Par exemple, le code suivant créera un point de terminaison qui n'accepte que des requêtes de type post et est documenté dans swagger en utilisant le sérialiseur.

class SomeThing(GenericAPIView):
    serializer_class = MySerializer

    def post(self, request, *args, **kwargs):
        serializer = MySerializer(data=request.data)
        if serializer.is_valid() is False:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

        res = do_magic(**serializer.data)
        return Response(res)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X