2017-02-18 1 views
3

Ich habe eine API erstellt und möchte Prolog doc machen. Ich entwickle keine Serialize dafür.Django Rest Swagger APIView

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')), 
] 

Ich möchte alle Parameter in Swagger bekommen, die ich immer bin nicht.

i am not able to get parameters

ich bin mit:

django-rest-Prahlerei == 2.1.1

djangorestframework == 3.5.3

+0

So verwenden Sie Yaml-Dokumente, diese Funktion wird nicht mehr im Django-Swagger unterstützt. Ich habe das gleiche Problem, könnten Sie mich anpingen, wenn Sie die Lösung finden? –

+0

@OleksandrDashkov bitte gehen Sie durch die Antwort und fragen, ob das immer noch nicht beantwortet Ihre Fragen –

+0

@RagulParani Wirklich kann ich nicht testen, weil ich bereits auf die native Docs der DRF wechselte –

Antwort

2

Die get_swagger_view() Methode nicht Ihnen das Steuerelement zum Hinzufügen von Parametern und Beschreibungen zu den URLs in Ihrer App geben

Die Lösung hierfür ist explizite Schemadefinition zu verwenden. Sie können ein Dokument erstellen, das eine Darstellung des Core-API-Schemacontainers darstellt. Gehen Sie den folgenden Link durch. Lesen Sie den Core-API Abschnitt

Core API schema generator

Dies erfordert, dass Sie ein Schema für die URLs und die Parameter zu erstellen, die in Ihrer Anwendung verwendet werden.

eine Datei für Prahlerei erstellen

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("---inside schema view-----") 
    # noinspection PyArgumentList 
    schema = coreapi.Document(
    title='Your Title', 
    url='Your host url', 
    content={ 
     'search': coreapi.Link(
      url='/search/', 
      action='get', 
      fields=[ 
       coreapi.Field(
        name='from', 
        required=True, 
        location='query', 
        description='City name or airport code.' 
       ), 
       coreapi.Field(
        name='to', 
        required=True, 
        location='query', 
        description='City name or airport code.' 
       ), 
       coreapi.Field(
        name='date', 
        required=True, 
        location='query', 
        description='Flight date in "YYYY-MM-DD" format.' 
       ) 
      ], 
      description='Return flight availability and prices.' 
     ) 
    } 
) 
    # schema = generator.get_schema(request) 
    return response.Response(schema) 

Zur Erklärung auf coreapi.Document, coreapi.Field, coreapi.Link freundlich zu dem oben genannten Link verweisen.

Erstellen Sie die URL für die Prahlerei docs:

urls.py

url('^docs', swagger.schema_view) 
2

Betrachten Sie die GenericAPIView statt, weil dies die Dokumentation erzeugen. Es ist ein bisschen wie ein Hack dies zu tun, wenn der Endpunkt nicht zu einem Modell gehört, aber es funktioniert.

Der folgende Code erstellt beispielsweise einen Endpunkt, der nur Postanforderungen annimmt und innerhalb von swagger mithilfe des Seralizers dokumentiert wird.

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) 
Verwandte Themen