未登录的用户会被@login_required()
装饰器重定向到LOGIN_URL
中指定的settings.py
。到现在为止还挺好。但我不想要那个。我想向没有登录的人显示错误消息,而不是重定向它们。
我认为这可行,但我得到的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!")
我出错的任何想法?
答案 0 :(得分:1)
@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)
的更多信息
此外,user.is_authenticated
是一种方法,您需要调用它来获取布尔结果。 not user.is_authenticated
始终为False
。