首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个django-rest-swagger API文档不能正常显示/工作?

为什么这个django-rest-swagger API文档不能正常显示/工作?
EN

Stack Overflow用户
提问于 2014-09-09 20:20:58
回答 2查看 6.6K关注 0票数 8

我已经构建了一个Django API,当通过POST给出一个电子邮件地址时,它将使用一个布尔值来响应,该值指示是否存在我的数据库中已经存在的电子邮件地址:

代码语言:javascript
复制
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-休息-昂首阔步包为这个API自动生成文档。我安装了包,并将上面看到的注释插入到三元引号之间。当我查看django-rest-swagger为这个API生成的文档时,我看到了下面的图像。

但是,当我单击Try it out!按钮时,会得到如下所示的错误。值得注意的是,它从来没有给我一个机会,输入电子邮件的论点,它应该通过邮寄。

为什么Django-Swagger包不创建允许我通过POST正确地讨论“电子邮件”的文档?我该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-12 07:42:12

我用django rest-swagger创建的cigar_example测试了这一点,在那个例子中,他们编写了一个自定义视图,它也没有呈现输入参数。

最后,我查看了源代码,发现django-rest-swagger需要get_serializer_class来构建身体参数。

因此,它与以下代码一起工作:

代码语言:javascript
复制
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

代码语言:javascript
复制
from rest_framework import serializers


class IsEmailTakenSerializer(serializers.Serializer):
    email = serializers.EmailField()
票数 13
EN

Stack Overflow用户

发布于 2014-09-10 09:27:42

django-rest-swagger试图在没有数据的情况下发送一个POST请求。

首先,你必须像这样修正你的观点:

代码语言:javascript
复制
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表单字段的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25752983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档