2015-01-04 84 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