我试图在注册后自动登录用户,但任何事情似乎都有效。
不起作用:
if registroForm.is_valid():
registroForm.save()
user = authenticate(username=registroForm.cleaned_data['username'], password=registroForm.cleaned_data['password1'])
request.session['_auth_user_id'] = user.pk
request.session['_auth_user_backend'] = user.backend
return JsonResponse({})
不起作用:
if registroForm.is_valid():
registroForm.save()
usuario = authenticate(username=registroForm.cleaned_data['username'], password=registroForm.cleaned_data['password1'])
login(request, usuario)
return JsonResponse({})
我正在使用Django 2.0
这是我按照Django docs这样做的方式:
def post(self,request):
form = self.form(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password1']
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
user = User.objects.create_user(username, username, password)
login(request, user)
return HttpResponseRedirect(reverse(request.POST['next']))
context = {'form' : form,
'title': self.title,
'myurl' : self.myurl,
'submit': self.submit,
'nexturl' : self.nexturl,
}
return render(request, self.template_name, context)
对于我的应用程序,我必须在验证失败的情况下在上下文中添加一些额外的东西。你应该能够在那里传递表格。
编辑:
你不想在这里使用authenticate
。由于这是注册,您需要创建新用户(create_user()
),然后使用该用户的信息调用login
(这是在except
之后的代码块中间的行)。然后重定向到配置文件更新页面,您可以在其中提示用户输入要与用户一起存储的其他信息。