微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

decorators.py中的request.user返回不同的结果到views.py中的self.request.user

如何解决decorators.py中的request.user返回不同的结果到views.py中的self.request.user

我在'decorators.py'文件中创建了一个装饰器'unauthenticated_user(view_func)',如果当前用户未通过身份验证,该装饰器将限制用户访问视图。

在“ unauthenticated_user()”函数中,有一个条件“ request.user.is_authenticated”,如果对令牌附加的用户进行了身份验证,则应返回true。但是,在测试此功能时,我注意到“ decorators.py”中的“ request.user”并不总是等于“ views.py”中“ self.request.user”返回的正确值。取而代之的是,它通常会返回以前登录用户,或者返回“ AnonymousUser”,这会破坏功能

decorators.py:

def unauthenticated_user(view_func):
    def wrapper_func(request,*args,**kwargs):
        if request.user.is_authenticated:
            return view_func(request,**kwargs)
        else:
            return HttpResponse('No user logged in')

    return wrapper_func

views.py:

@method_decorator(unauthenticated_user,name = 'dispatch')
class Userlogout(APIView):
    ...

这是我用来测试当decorators.py函数返回'AnonymousUser'时实际上是否有经过身份验证的用户的views.py函数

class Current(APIView):
    def get(self,request,format = None):
        try:
            return Response(self.request.user.is_authenticated)
        except:
            return Response("no user currently logged in")

如何确保“ decorators.py”,“ unauthenticated_user”功能可以访问当前请求中的用户,就像“ views.py”中的“当前”视图一样?

任何帮助将不胜感激。据我所知,在“ decorators.py”函数中无法调用“自我”。

谢谢,Grae

解决方法

由于使用的是DRF,因此应使用视图的IsAuthenticated权限类

from rest_framework.views import APIView
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response


class MyAPIView(APIView):
    permission_classes = (IsAuthenticated,)

    def get(self,request,*args,**kwargs):
        return Response({"msg": "Some message"})

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。