2014-09-09 2 views
8

Ho costruito un API Django che quando dato un indirizzo e-mail tramite il POST risponderà con un valore booleano che indica il tempo o non quell'indirizzo email già esiste nel mio database:Perché questa documentazione dell'API django-rest-swagger non viene visualizzata/funziona correttamente?

class isEmailTaken(views.APIView): 
    permission_classes = [permissions.AllowAny,] 

    def post(self, request, *args, **kwargs): 
     try: 
      email = request.DATA['email'] 
     except KeyError: 
      return HttpResponse(
       'An email was not given with this request.', 
       status=status.HTTP_400_BAD_REQUEST, 
      ) 
     return HttpResponse(
      json.dumps(
       User.objects.filter(email=email), 
       content_type="application/json", 
       status=status.HTTP_200_OK, 
      ) 
     ) 

ora vorrei utilizzare il django-rest-swagger per generare automaticamente la documentazione per questa API. Ho installato il pacchetto e inserito i commenti che vedi sopra tra le virgolette. Quando guardo la documentazione prodotta da django-rest-swagger per questa API, vedo l'immagine qui sotto.

enter image description here

Tuttavia, quando si fa clic sul pulsante Try it out!, ottengo l'errore mostrato di seguito. In particolare, non mi dà mai la possibilità di inserire l'argomento email che dovrebbe inviare tramite POST.

enter image description here

Perché l'Django-Swagger-Package creare documenti che mi permettono di correttamente l'argomento "e-mail" tramite POST? Come faccio a fare questo lavoro?

+4

Ai due down-elettori: come è questa domanda poco chiara o non utile? Perché dovresti dire che mostra una mancanza di ricerca. Ho spiegato cosa ho provato a fare. Il software non sembra funzionare come pubblicizzato e sto chiedendo il perché. Sembra una domanda completamente legittima per cui è stato creato StackOverflow. –

+0

Puoi stampare la richiesta e gli oggetti request.DATA appena prima dell'istruzione return così potremmo vedere, cosa sta succedendo qui? – Norman8054

+0

Norman, ho modificato la domanda originale per includere due nuove istruzioni di registro. È possibile vedere l'output qui: https://gist.github.com/syedsaqibali/b2f825c8234df77a9e7a –

risposta

11

ho provato questo con cigar_example che è fatto da django-riposo-spavalderia e in questo esempio hanno scritto una custom view che non è anche il rendering ingresso Parametri

Infine guardo in codice sorgente e ha scoperto che Django-resto- spavalderia ha bisogno di costruire get_serializer_class parametri corporei

quindi ha funzionato con il seguente codice

class isEmailTaken(views.APIView): 
    permission_classes = [permissions.AllowAny,] 
    serializer_class = IsEmailTakenSerializer 

def get_serializer_class(self): 
    return self.serializer_class 

def post(self, request, *args, **kwargs): 
    try: 
     email = request.DATA['email'] 
    except KeyError: 
     return HttpResponse(
      'An email was not given with this request.', 
      status=status.HTTP_400_BAD_REQUEST, 
     ) 
    return HttpResponse(
     json.dumps(
      User.objects.filter(email=email), 
      content_type="application/json", 
      status=status.HTTP_200_OK, 
     ) 
     ) 

e IsEmailTakenSerializer

from rest_framework import serializers 
class IsEmailTakenSerializer(serializers.Serializer): 
    email = serializers.EmailField() 
+0

Grazie Venkatesh! Farò un tentativo nelle prossime 12 ore. Supponendo che funzioni (e penso che lo sarà) ti darò i punti premio in quel momento. –

+0

Questo ha dato l'errore: nome 'campi' non è definito in IsEmailTakenSerializer. C'è un errore di battitura qui? –

+0

@SaqibAli Ho aggiornato la risposta, per favore provalo ancora –

1

django-rest-swagger tenta di inviare una richiesta POST senza alcuni dati.

Per prima cosa devi correggere la visualizzazione in questo modo:

from rest_framework import status 
from django.http import HttpResponse 
import json 

def post(self, request, *args, **kwargs): 
    try: 
     email = request.DATA['email'] 
    except KeyError: 
     return HttpResponse(
      'An email was not given with this request.', 
      status=status.HTTP_400_BAD_REQUEST, 
     ) 
    return HttpResponse(
     json.dumps(
      User.objects.filter(email=email), 
      content_type="application/json", 
      status=status.HTTP_200_OK, 
     ) 
    ) 

Se si tenta questo, si dovrebbe vedere il messaggio di errore bello ora.

Il passaggio successivo consiste nell'esaminare i documenti di django-rest-swagger per scoprire che cosa deve eseguire il rendering di un campo di modulo html sopra il pulsante "Provalo".

+0

Questo sicuramente aiuta un po '. Grazie. –

+0

Ho modificato la domanda originale in modo che includa la soluzione di Norman e si concentri sulla parte ancora notevole della domanda. –