Почему эта документация API django-rest-swagger не отображается / не работает должным образом?

Я построил API Django, который при задании адреса электронной почты через POST будет отвечать логическим значением, указывающим погоду или нет, что адрес электронной почты уже существует в моей базе данных:

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

теперь я хотел бы использовать Джанго-остальное-чванство пакет для автоматического создания документации для этого API. Я установил пакет и вставил комментарии, которые вы видите выше, между тройными кавычками. Когда я смотрю на документацию, подготовленную django-rest-swagger для этого API, я вижу изображение ниже.

enter image description here

однако, когда я нажимаю Try it out! кнопка, Я получаю ошибку, показанную ниже. Примечательно, что это никогда не дает мне возможности ввести аргумент электронной почты, который он должен отправить по почте.

enter image description here

почему Django-Swagger-Package не создает документы, которые позволяют мне правильно аргументировать "электронную почту" через POST? Как мне это сделать?

2 ответов


Я проверил это с помощью cigar_example, который сделан django-rest-swagger, и в этом примере они написали один представление который также не отображает входные параметры

наконец, я заглянул в исходный код и обнаружил, что django-rest-swagger нуждается в get_serializer_class для создания параметров тела

таким образом, он работал со следующим кодом

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

и IsEmailTakenSerializer

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

django-rest-swagger пытается отправить запрос POST без некоторых данных.

сначала вы должны исправить свой вид следующим образом:

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

Если вы попробуете это, вы увидите сообщение об ошибке сейчас.

следующий шаг-посмотреть на документы django-rest-swagger, чтобы узнать, что делать, чтобы он отображал поле формы html прямо над кнопкой "попробовать".