我已经构建了一个Django API,当通过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,
)
)
现在我想使用django-rest-swagger包自动生成此API的文档。我安装了软件包并在三引号之间插入了您在上面看到的注释。当我查看django-rest-swagger为此API生成的文档时,我会看到下面的图片。
但是,当我点击Try it out!
按钮时,我会收到如下所示的错误。值得注意的是,它从未让我有机会输入它应该通过POST发送的电子邮件参数。
为什么Django-Swagger-Package没有创建允许我通过POST正确地使用“email”参数的文档?我如何使这项工作?
答案 0 :(得分:13)
我使用django-rest-swagger制作的cigar_example
对此进行了测试,在该示例中,他们编写了一个custom view,但也没有渲染输入参数
最后我查看了源代码,发现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()
答案 1 :(得分:1)
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表单字段。