如何在使用Django的FormView中注册后自动登录用户?

时间:2015-01-04 22:28:37

标签: django login formview

我有一个表单类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),但我无法得到它。问题是:我怎么能得到这个?

1 个答案:

答案 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)

<强>更新

上次更新上面的代码时,我搞砸了。我已经更新了它。这是你必须要做的。

  1. form_valid(self, request, form)更改回form_valid(self, form)
  2. request.POST['username']替换为self.request.POST['username']
  3. request.POST['password']替换为self.request.POST['password']