我想将 login_required
与基于函数的 View 一起使用。我浏览了 Django's official docs of django.contrib.auth.decorators.login_required 。我无法清楚地捕获它。
问题是,即使用户已经通过身份验证,控件也会返回到登录
功能,而不是转到主页。
还需要进行哪些更改才能允许使用我的代码登录?
def login(request):
"""
"""
data_dict = {}
if request.POST:
req_dict = dict(zip(request.POST.keys(), request.POST.values()))
accmgr = AccountManager()
user = accmgr.validate_user(**req_dict)
if user:
ret = redirect('homepage')
else:
data_dict["msg"] = "Username or password is incorrect!"
ret = render(request, "login.html", data_dict)
else:
ret = render(request, "login.html", data_dict)
return ret
@login_required(login_url='/login')
def homepage(request):
'''
'''
return render(request, "adminpage.html", {"title":"Hello World"})
注意:accmgr.validate_user
内部检查user.is_authenticated
。我还必须执行一些其他检查才能允许用户添加自定义功能。
还在settings.py中添加了LOGIN_URL
LOGIN_URL ='/login/'
最佳答案
login_required
装饰器检查 request.user.is_authenticated()
是否返回 True
。问题可能是,accmgr.validate_user 方法并没有真正对用户进行身份验证。
您应该调用authenticate()
相反,实际登录用户。
from django.contrib.auth import login as django_login
from django.contrib.auth import authenticate
def login(request):
...
req_dict = request.POST.copy()
user = authenticate(
username=req_dict['username'], password=req_dict['password'])
if user:
django_login(request, user)
...
请参阅documentation了解更多信息。
关于python - Login_required Django 装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32346446/