我正在尝试在Django中获得用户注册,然后将其重定向到他的主页,即“仪表板”。虽然,它会被注册,但由于提供的身份验证(@login_required
),用户不会被重定向到他的主页。用户必须再次提交用户名和密码才能登录页面。
这是我的 views.py
def register(request):
form = RegisterForm(request.POST or None)
if(form.is_valid()):
user = form.save()
login(request,user)
return redirect('/dashboard/')
ctx = {
'form' : form
}
return render_to_response('home/register.html',ctx, context_instance = RequestContext(request))
@login_required
def dashboard(request):
HttpResponse("HELLO")
答案 0 :(得分:2)
在致电authenticate()
之前,您需要先使用login()
。
from django.contrib.auth import authenticate, login
if(form.is_valid()):
form.save()
new_user = authenticate(username=form.cleaned_data.get('username'),
password= form.cleaned_data.get('password'))
login(request,new_user)
return redirect('/dashboard/')
来自Django docs:
当您手动登录用户时,必须在调用login()之前调用authenticate()。 authenticate()在用户上设置一个属性,注意哪个身份验证后端成功验证了该用户(有关详细信息,请参阅后端文档),稍后在登录过程中需要此信息。如果您尝试直接登录从数据库检索的用户对象,则会引发错误。