@登录\u required(),不重定向loggedout用户

2024-04-26 18:26:59 发布

您现在位置:Python中文网/ 问答频道 /正文

未登录的用户由@login_required()装饰程序重定向到settings.py中指定的LOGIN_URL。到现在为止,一直都还不错。但我不想那样。我不想重定向它们,而是想向未登录的用户显示一条错误消息。你知道吗

我原以为这样行得通,但我得到一个TypeError: ios_login_required() takes exactly 1 argument (0 given)我不明白。是个装修工,需要什么论证?你知道吗

def ios_login_required(f):
    def wrapper(request, *args, **kwargs):
        if not request.user.is_authenticated:
            return HttpResponse("You need to be logged in.")
        else:
            return f(request, *args, **kwargs)
    return wrapper

带有装饰器的视图可以如下所示:

@ios_login_required()
def amiloggedinornot(request):
    return HttpResponse("Congrats, you are logged in!")

知道我哪里出错了吗?你知道吗


Tags: 用户inreturnrequestdefrequiredargslogin
1条回答
网友
1楼 · 发布于 2024-04-26 18:26:59
@ios_login_required()
def amiloggedinornot(request):
    ...

# equals to 
def amiloggedinornot(request):
    ...
amiloggedinornot = ios_login_required()(amiloggedinornot)

您可以看到ios_login_required在需要参数f的情况下被调用而不需要任何参数。你知道吗

因此,可以尝试这样的操作(在@ios_login_required之后没有()):

@ios_login_required
def amiloggedinornot(request):
    ...

# which equals to
def amiloggedinornot(request):
    ...
amiloggedinornot = ios_login_required(amiloggedinornot)

您可以阅读更多关于Python装饰器herehere的信息

此外,user.is_authenticated是一个方法,您需要调用它来获得布尔结果。not user.is_authenticated将始终是False。你知道吗

相关问题 更多 >