WEIRD Django AuthenticationForm行为

时间:2016-09-21 18:28:59

标签: python django python-2.7 django-forms

我整天都试图解决这个问题,但我无法确切地看到问题的来源。

我有一个 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,但它没有打印出来。

1 个答案:

答案 0 :(得分:1)

尝试进行以下更改:

reg = LoginForm(data=request.POST)

AuthenticationForm略有不同,因为它需要data参数。

另请注意,您应该使用实际有效的用户名和密码组合(对应于现有用户)对其进行测试,因为AuthenticationForm也会检查它。