我有一个表单类UserCreateForm的FormView注册表单。它工作正常,但现在我需要在注册后自动登录用户,我有下一个代码:
class RegisterView(FormView):
form_class = UserCreateForm
template_name = 'contadores/register.html'
success_url = '/contadores/create/'
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated():
return HttpResponseRedirect('/contadores/create')
else:
return super(RegisterView, self).dispatch(request, *args, **kwargs)
def form_valid(self,form):
user = form.save()
user = authenticate(username=request.POST['username'],password=request.POST['password'])
login(self.request,user)
return super(RegisterView,self).form_valid(form)
我已尝试使用clean_data而不是request.POST但是无论如何都会出错,我也尝试使用form_valid函数中的login(self.request,form.user_cache),但我无法得到它。问题是:我怎么能得到这个?
答案 0 :(得分:2)
不是调用login()
方法,而是手动设置会话cookie。
def form_valid(self, form):
user = form.save()
user = authenticate(username=self.request.POST['username'],password=self.request.POST['password'])
request.session['_auth_user_id'] = user.pk
request.session['_auth_user_backend'] = user.backend
return super(RegisterView, self).form_valid(form)
<强>更新强>
上次更新上面的代码时,我搞砸了。我已经更新了它。这是你必须要做的。
form_valid(self, request, form)
更改回form_valid(self, form)
。request.POST['username']
替换为self.request.POST['username']
。request.POST['password']
替换为self.request.POST['password']
。