Почему эта документация 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, я вижу изображение ниже.
однако, когда я нажимаю Try it out!
кнопка, Я получаю ошибку, показанную ниже. Примечательно, что это никогда не дает мне возможности ввести аргумент электронной почты, который он должен отправить по почте.
почему 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 прямо над кнопкой "попробовать".