繁体   English   中英

Django中的表单层次结构问题

[英]Forms hierarchy issue in Django

我创建了一个登录表单,如下所示:

class LoginForm(AuthenticationForm):
    username = forms.CharField (label=_("Usuario"), max_length=30, 
                widget=forms.widgets.
                TextInput(attrs={'id':'username','maxlength':'25'}))
    password = forms.CharField (label=_("Password"), widget=forms.widgets.
                PasswordInput(attrs={'id':'password','maxlength':'10'}))

我在此视图中使用它:

def login(request):
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
                ...

调试后,我意识到form.is_valid()方法返回false,因为is_bound attr为false。 我需要重新定义表单中的内容还是修改视图???

编辑1

我一直关注关于is_valid()方法返回False的问题: form.is_valid()总是返回false

但是问题仍然存在。

关于当前接受的答案要注意的一个问题:

form = LoginForm(request=request, data=request.POST)

是传递请求似乎使Django能够在启动会话之前检查测试cookie是否成功的行为。 问题是,如果您之前未设置测试Cookie(必须在先前的视图请求中设置测试Cookie),它将失败并且您的登录将失败。 我建议只像这样传递data关键字参数:

form = LoginForm(data=request.POST)

除非我错过了一些重要的事情(似乎绝对没有必要进行Cookie检查),否则在大多数情况下效果会更好。 您也可以在加载登录页面的视图中调用request.set_test_cookie(),但这并不涵盖所有情况。

该问题实际上类似于您链接到的问题中的问题。 您要继承的表单django.contrib.auth.forms.AuthenticationFormrequest作为其第一个参数,在通常的data参数之前。 这就是您的表单报告其未绑定的原因-就其而言,您没有传递任何数据,因此没有任何绑定内容。

因此,在您看来,您需要像这样实例化它:

form = LoginForm(request=request, data=request.POST)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM