【问题标题】:Return response statement is not returning any response返回响应语句不返回任何响应
【发布时间】:2021-09-15 18:08:12
【问题描述】:

我正在创建一个注销视图,以使用 simplejwt 从我的 django restframework 中注销。没有直接的注销方式,因此只有将刷新令牌列入黑名单才是解决办法。

那些打印语句按预期工作,因此它确实将标记列入黑名单,但 return 语句不返回任何内容,为什么会这样,我如何返回响应?我猜 save 函数不返回任何内容,是真的吗?

class LogoutSerializer(serializers.Serializer):
    refresh = serializers.CharField()

    def validate(self, attrs):
        self.token = attrs['refresh']
        return attrs

    def save(self, **kwargs):
        try:
            RefreshToken(self.token).blacklist()
            print('done')
            return Response({'msg':'token has been blacklisted'})
       

        except TokenError:
            print('not done')
            return Response({'msg':'token is expired or blacklisted'})

views.py

class LogoutAPIView(APIView):
    serializer_class = LogoutSerializer
    permission_classes = [IsAuthenticated]

    def post(self, request):
        serializer = self.serializer_class(data = request.data)
        serializer.is_valid(raise_exception = True)
        serializer.save()

        return Response(status = status.HTTP_204_NO_CONTENT)

【问题讨论】:

    标签: django rest serialization django-rest-framework django-rest-framework-simplejwt


    【解决方案1】:
    def post(self, request):
        serializer = self.serializer_class(data = request.data)
        serializer.is_valid(raise_exception = True)
        serializer.save()
    
        return Response(status = status.HTTP_204_NO_CONTENT) # this is the response that you're actually returning to the client.
    

    如果您想在序列化程序中返回响应,您可以这样做:

    class LogoutSerializer(serializers.Serializer):
        refresh = serializers.CharField()
    
        def validate(self, attrs):
            self.token = attrs['refresh']
            return attrs
    
        def save(self, **kwargs):
            RefreshToken(self.token).blacklist()
    

    然后:

    def post(self, request):
        serializer = self.serializer_class(data = request.data)
        serializer.is_valid(raise_exception = True)
        try:
            serializer.save()
            return Response({'msg':'token has been blacklisted'})
        except TokenError:
            return Response({'msg':'token is expired or blacklisted'})
    

    【讨论】:

      猜你喜欢
      • 2017-12-08
      • 1970-01-01
      • 2023-02-14
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 2019-11-07
      • 1970-01-01
      相关资源
      最近更新 更多