如何在使用Django在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, *

我有一个表单类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_有效函数中使用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
    请求没有
    密码。您确定表单提交正确吗?