2016-08-24 123 views
0

我在區分Django中的登錄和註冊時遇到了問題。我能夠成功創建一個註冊表單(註冊時也會記錄用戶的註冊表單)。我正在努力做出單獨的註冊表單。用戶登錄,身份驗證以及在Django中註冊1.10

以下代碼成功呈現一個帶有「用戶名」和「密碼」字段的表單。點擊「提交」後,信息將作爲用戶對象進行存儲,然後進行標準化,然後保存到數據庫,然後用於登錄用戶。

我試圖刪除user.save()行,因爲我認爲這將使加用戶和伐木用戶之間的差異。但是,當發生這種情況時,我的終端會顯示不成功的發佈請求(「POST/polls/HTTP/1.1」200 1227)。

請讓我知道我可以做些什麼來簡單地讓用戶登錄,如果他的帳戶信息已經存在於數據庫中。謝謝!

class LoginFormView(View): 
form_class = LoginForm 
template_name = 'polls/login_form.html' 

#display blank form using get 
def get(self, request): 
    form = self.form_class(None) 
    return render(request, self.template_name, {'form': form}) 

#process the form data using post 
def post(self, request): 
    form = self.form_class(request.POST) 

    if form.is_valid(): 

     user = form.save(commit=False) 

     #cleaned and normalized data 
     username = form.cleaned_data['username'] 
     password = form.cleaned_data['password'] 
     user.set_password(password) 
     user.save() 

     #return user object if credentials are correct 
     user = authenticate(username=username, password=password) 

     if user is not None: 

      if user.is_active: 
       login(request, user) 
       return redirect('polls:index') 


    return render(request, self.template_name, {'form': form}) 
+0

請修正您的代碼的縮進。什麼是「LoginForm」?它的'save()'方法是做什麼的?如果它是登錄表單,爲什麼要設置密碼? Django帶有[認證視圖](https://docs.djangoproject.com/en/1.10/topics/auth/default/#module-django.contrib.auth.views),包括登錄視圖。爲什麼不使用它而不是自己寫? – Alasdair

回答

0

很簡單,您已經完成了漫長的過程,創建了另一個視圖來處理登錄。

class LoginView(generics.FormView): 
    form_class = LoginForm 
    template_name = 'polls/login_form.html' 

    def form_valid(self, form): 
     username = form.cleaned_data.get('username') 
     password = form.cleaned_data.get('password') 

     user = authenticate(username=usernamem, password=password) 
     if user is not None: 
      if user.is_active: 
       login(user, self.request) 
       return redirect('polls:index') 
     return self.render_to_response(self.get_context_data(form=form))