2013-07-26 37 views
2

好的,所以我試圖用Django創建一個日誌。Python - Django - activate()返回無

從views.py:

from django.shortcuts import * 
from forms import UserRegistrationForm 
from django.contrib.auth import authenticate, login 
from django.core.mail import send_mail 
from django.conf import settings 
import pprint 
import utils 
import models 
from django.http import HttpResponse 
import views 
from django.conf.urls import patterns, url  

def login_user(request): 
    state = "Please log in below..." 
    username = password = '' 

    if request.POST: 
     username = request.POST.get('username') 
     password = request.POST.get('password') 

     user = authenticate(username=username, password=password) 

     if user is not None: 
      if not user.is_verified: 
       state = "Please check your e-mail to verify your account." 
      elif user.is_active: 
       login(request, user) 
       state = "You're successfully logged in!" 
      else: 
       state = "Your account is not active, please contact the site admin." 
     else: 
      state = "Your username and/or password were incorrect." 

     return render_to_response('myapp/dashboard.html', {'state': state}, RequestContext(request)) 

    else: 
     return render_to_response('myapp/login.html', RequestContext(request)) 

我的登錄模板(login.html的):

<h3>Login</h3><hr /> 

      <form action="/login/" method="post"> 
     {% csrf_token %} 
       {% if next %} 
       <input type="hidden" name="next" value="{{ next }}" /> 
       {% endif %} 

       username: 
       <input type="text" name="username" value="{{ username }}" /><br /> 
       password: 
       <input type="password" name="password" value="" /><br /> 

       <input class="btn" type="submit" value="Log In" /> 
      </form> 

我使用的是基本的SQLite3把一切想通了。

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': 'tempDB' 
    } 
} 

當我登錄到我的管理站點我看到的用戶:

用戶名:尼克 密碼:蟒蛇manage.py執行syncdb沒有問題

從settings.py運行散列版本的暱稱

當我插入一箇中斷(使用PBD)時,我能夠看到該應用程序通過login_user視圖。

> ...myapp/myapp/views.py(52)login_user() 
-> state = "Please log in below..." 
(Pdb) n 
> ...myapp/myapp/views.py(53)login_user() 
-> username = password = '' 
(Pdb) print username 
*** NameError: name 'username' is not defined 
(Pdb) n 
> ...myapp/myapp/views.py(55)login_user() 
-> if request.POST: 
(Pdb) print username 

(Pdb) n 
> ...myapp/myapp/views.py(56)login_user() 
-> username = request.POST.get('username') 
(Pdb) print username 

(Pdb) n 
> ...myapp/myapp/views.py(57)login_user() 
-> password = request.POST.get('password') 
(Pdb) print username 
nick 
(Pdb) n 
> ...myapp/myapp/views.py(59)login_user() 
-> user = authenticate(username=username, password=password) 
(Pdb) print password 
nick 
(Pdb) n 
> ...myapp/myapp/views.py(61)login_user() 
-> if user is not None: 
(Pdb) print user 
None 

這表明它獲取用戶名「缺口」和密碼「尼克」(我設置的帳號了的設置),但是我遇到的問題是身份驗證時仍然返回無這意味着什麼設置不正確/無法正常工作。

是login_user後查看「國家」輸出「您的用戶名和/或密碼不正確。」正如告訴做的views.py

我將不勝感激,如果有人能夠幫助我!

+0

實現自己的登錄頁面之前,你有沒有嘗試過使用內置的登錄頁面和測試。它的工作原理? https://docs.djangoproject.com/en/1.5/topics/auth/default/#module-django.contrib.auth.views – Thomas

回答

0

(作答在G +,以及)

從您的PDB會議:

(Pdb) print password 
nick 

如果這是發生什麼事情,有一個問題存在,你不同意? 另外,我會做摒棄了瓦爾的初始化和做到這一點,而不是:

username = request.POST.get('username') 
password = request.POST.get('password') 
if username and password: 
    # Your code 

request.POST.get無論如何都會正常工作(POST總是被初始化爲的QueryDict)和get()返回無如果關鍵是沒有找到,所以你不會得到任何錯誤 - 和你看到發生了什麼事情可能更容易