【问题标题】:WEIRD Django AuthenticationForm Behaviour奇怪的 Django AuthenticationForm 行为
【发布时间】:2017-01-30 03:26:38
【问题描述】:

我整天都在试图解决这个问题,但我真的看不出问题出在哪里。

我有一个 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>

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

编辑

我也尝试打印出reg.errors,但它没有打印出任何内容。

【问题讨论】:

  • 检查发生情况的最佳方法是在失败后打印 reg.errors
  • @Aquiles 它打印出一个空字符串。

标签: python django python-2.7 django-forms


【解决方案1】:

尝试进行以下更改:

reg = LoginForm(data=request.POST)

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

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

【讨论】:

  • 你的意思是AuthenticationForm.is_valid()照顾authenticate()
  • 是的,AuthenticationForm 的 clean 方法在后台调用 authenticate 以检查这样的用户是否存在。
猜你喜欢
  • 2014-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 2016-04-27
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多