2016-09-21 29 views
1

我一整天都試圖弄清楚這一點,但我無法真正看到問題來自哪裏。WEIRD Django AuthenticationForm行爲

我有一個DjangoAuthenticationForm這似乎是以某種方式提交數據,但沒有得到驗證。

forms.py

class LoginForm(AuthenticationForm): 
    username = forms.CharField(widget=forms.TextInput(attrs={'name': 'username'})) 
    password = forms.CharField(widget=forms.PasswordInput(attrs={'name': 'password'})) 

views.py

def index(request): 
    template = 'myapp/login.html' 
    if request.method == "POST": 
     print request.POST #prints QueryDict with its data 
     reg = LoginForm(request.POST or None) 
     if reg.is_valid(): 
      return HttpResponse('Success: Form is valid!')    
     else: 
      return HttpResponse('Error: Form not valid') 

    loginform = LoginForm() 
    context = {'loginform':loginform} 
    return render(request, template, context) 

HTML

<form method="post" action="."> 
     {% csrf_token %} 
     <h2>Sign in</h2> 
     <p class="text-danger">{{loginform.errors}}</p> 
     {{ loginform.as_p }}  
     <button name = "signin" type="submit" value="0">Sign in</button> 
    </form> 

print request.POST在我views.py打印的QueryDict:{u'username ':[u'yax'],u'csrfmiddlewaretoken ':[u'r8y1PaVNjxNWypdzP MaFe1ZL7IkE1O7Hw0yRPQTSipW36z1g7X3vPS5qMMX56byj'],u'password ':[u'sdfdsfsddfs'] , u'signin':[u'0']}reg.is_valid()總是返回false

編輯

我也曾嘗試打印出reg.errors但它不會打印出任何東西。

+0

檢查發生什麼的最好方法是在失敗後打印reg.errors – Aquiles

+0

@Aquiles它打印出一個空字符串。 – Yax

回答

1

請嘗試以下變化:

reg = LoginForm(data=request.POST) 

AuthenticationForm是它需要的data說法略有不同。

另請注意,您應該使用實際有效的用戶名和密碼組合(對應於現有用戶)對其進行測試,因爲AuthenticationForm也會對此進行檢查。

+0

你的意思是'AuthenticationForm.is_valid()'照顧'authenticate()'? – Yax

+0

是的,'AuthenticationForm'乾淨的方法在後臺調用'authenticate'來檢查這個用戶是否存在。 – user6731765