如何在使用Django在FormView中注册后自动登录用户?
我有一个表单类UserCreateForm中的FormView注册表单。工作正常,但现在我需要在注册后自动登录用户,我有下一个代码:如何在使用Django在FormView中注册后自动登录用户?,django,login,formview,Django,Login,Formview,我有一个表单类UserCreateForm中的FormView注册表单。工作正常,但现在我需要在注册后自动登录用户,我有下一个代码: class RegisterView(FormView): form_class = UserCreateForm template_name = 'contadores/register.html' success_url = '/contadores/create/' def dispatch(self, request, *
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_有效函数中使用login(self.request、form.user_cache),但我无法获得它。问题是:我如何获得此信息?手动设置会话cookie,而不是调用
login()
方法
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\u valid(self,request,form)
更改回form\u valid(self,form)
request.POST['username']
替换为self.request.POST['username']
request.POST['password']
替换为self.request.POST['password']
哦,那是因为您必须将
请求
传递到表单\u valid()
。更新了答案。谢谢,但我想我必须将请求传递给Super(RegisterView,self)。form_有效(form),因为我是django(和python)的新手,我应该在哪里传递请求?因为django说少了一个argument@user2921575知道了。更新了答案。这次应该很好。嘿,朋友,我可以让它工作,我做了所有你指示我的,但仍然不工作…:(.它显示:异常类型:MultiValue DictKeyError异常值:“'password'”该异常表示POST
请求没有密码。您确定表单提交正确吗?