2015-01-04 37 views
0

我有FormView从表单类UserCreateForm的注册表单。它workf罚款,但现在我需要登录的用户注册后自动,我有下面的代码:如何在使用Django的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.user_cache)在form_valid函数,但我不能得到它。问题是:我如何得到这个?

回答

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']
+0

它不工作,它说:“名字‘请求’没有定义 ” – dfrojas

+0

哦,那是因为你要通过'request'到'form_valid()'。更新了答案。 – xyres

+0

谢谢,但我想我必须将请求传递给Super(RegisterView,self).form_valid(form),因为我用新的django(和python)来传递请求吗?因为django说缺少一个参数 – dfrojas