我整天都试图解决这个问题,但我无法确切地看到问题的来源。
我有一个 Django AuthenticationForm
似乎是以某种方式提交数据但未经过验证。
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>
我的views.py中的print request.POST
打印 QueryDict:{u'username':[u'yax'],u'csrfmiddlewaretoken':[u'r8y1PaVNjxNWypdzP
MaFe1ZL7IkE1O7Hw0yRPQTSipW36z1g7X3vPS5qMMX56byj'],u'password':[u'sdfdsfsddfs']
,'signign':[u'0']} 但reg.is_valid()
不断返回false
。
修改:
我也试过打印reg.errors
,但它没有打印出来。
答案 0 :(得分:1)
尝试进行以下更改:
reg = LoginForm(data=request.POST)
AuthenticationForm
略有不同,因为它需要data
参数。
另请注意,您应该使用实际有效的用户名和密码组合(对应于现有用户)对其进行测试,因为AuthenticationForm
也会检查它。