自定义Django用户身份验证表单

时间:2011-10-09 19:10:14

标签: django forms

我是Django新手。我正在构建一个使用django-authentication模块的django项目。

所以我使用LoginForm为任何用户登录生成上下文变量{{form.username}}和{{form.password}}。但为了使用户体验更好,我有类似

的东西
    <td><input type="text" name="username"  id="" size="30" value="" class='loginput'/></td>

而不是简单的

    <td>{{ form.username }}</td>

如何使用输入标签但仍使用django-authentication后端表单?我也明白,对于任何其他形式我都可以使用小部件,形式媒体。我无法解决这个问题。

感谢。

1 个答案:

答案 0 :(得分:4)

为什么这会增强可用性?唯一的区别是您添加了class,并且由于某种原因已删除 id属性,因此无法使用label。我无法看到任何不太容易获取的东西会使用户体验变得更好。并且删除Django表单的动态能力,以便在验证失败的情况下重新显示错误的值,同样似乎不是一步。

但是,我无法真正理解你的问题是什么。如果您真的想在模板中使用这个不太可用的标记,为什么不这样做呢?在任何情况下,您都必须为contrib.auth视图提供模板,因此您有机会。

当然,更好的方法是简单地将LoginForm子类化并在那里添加HTML类:

class LoginForm(auth.forms.AuthenticationForm):
    username = forms.CharField(label=_("Username"), max_length=30, 
                               widget=forms.TextInput(attrs={'class': 'loginput'}))

并将此表单在额外的上下文中传递给登录URL:

(r'^accounts/login/$', 'django.contrib.auth.views.login',
      {'template_name': 'myapp/login.html', 'authentication_form': LoginForm}),