【问题标题】:return response in django rest-framework在 django rest-framework 中返回响应
【发布时间】:2013-04-09 05:18:27
【问题描述】:

我正在 django rest-framework 中编写一个应用程序: 我的意见.py:

class tagList(generics.ListCreateAPIView,APIView):

    model = tags
    serializer_class = getAllTagsDetailSerializer
    def get_queryset(self):
        print "q1"
        print self.request.QUERY_PARAMS.get('tag', None)
        print self.request.user
        print "q1"
        if tags.objects.filter(tag='burger')!= None:
             return tags.objects.filter(tag='burger')
        else:
            content = {'please move along': 'nothing to see here'}
            return Response(content, status=status.HTTP_404_NOT_FOUND)

如果查询返回无,我想返回错误状态代码。 但是如果我尝试设置 Response 它会引发错误:

Exception Type: TypeError
Exception Value:    
object of type 'Response' has no len()
Exception Location: /usr/local/lib/python2.7/dist-packages/django/core/paginator.py in _get_count, line 53

否则,如果查询结果不是无,则它正在工作。 如何在 Django rest-framework 上设置状态码。

【问题讨论】:

    标签: python django django-templates django-views django-rest-framework


    【解决方案1】:

    该方法应该返回一个 QuerySet,而不是一个 Response 对象,我敢打赌,你应该抛出一个 ExceptionAPIExceptionHttp404

    无论如何,您的处理似乎很奇怪,我认为您应该只返回 QuerySet,框架将处理结果是否为空。该方法应如下所示:

    def get_queryset(self):
        return tags.objects.filter(tag='burger')
    

    【讨论】:

    • 我实际上正在验证 APIkey,如果它有效,我将返回结果,否则我该怎么办.....你能告诉...
    • class couponsList(generics.ListCreateAPIView,APIView): model = coupons def get_object(self,key): try: return app.objects.filter(appKey=key).exists() except app.DoesNotExist: raise Http404 def get(self,request,format=None): key = self.request.QUERY_PARAMS.get('AppKey', None) self.get_object(key) da = coupons.objects.all() serializer_class = getAllCouponsDetailSerializer(da) return Response(serializer_class.data)try & 除了不工作。请帮助。我想检查 Apikey 是否有效,然后才能继续
    • 不知道为什么这被否决了,因为答案是正确的。另外,如果要处理 404 情况,请引发Http404 异常。
    • 如果你有一些 APIKey 需要验证,那么你必须发送一个异常。
    • 关于 404 我不确定,您要返回一个对象列表,然后只返回一个空列表,而不是 404,如果 API 预期返回单个对象,我将返回 404。但话又说回来,处理必须发回的 Http 响应应该是框架的工作,您在模型级别处理,您应该只发送对象或业务异常
    【解决方案2】:

    你可以试试这个

    model = tags # Model name
    serializer_class = getAllTagsDetailSerializer # Call serializer
    
    def get_queryset(self):
        key = self.request.QUERY_PARAMS.get('appKey', None)
        getTagName = self.request.QUERY_PARAMS.get('tagName')
        keyData = app.objects.filter(appKey=key).exists()    
        try:
            if keyData == True:
                return tags.objects.filter(tag=getTagName)
            else:
                raise exceptions.PermissionDenied
        except app.DoesNotExist:
            pass
    

    我认为它会起作用....

    【讨论】:

      猜你喜欢
      • 2018-03-24
      • 2019-11-09
      • 1970-01-01
      • 2023-02-20
      • 1970-01-01
      • 2019-08-19
      • 2014-12-07
      • 1970-01-01
      • 2023-02-24
      相关资源
      最近更新 更多