10

有没有办法预先填充 Django 表单密码字段,以便在生成的<input type="password">html 元素中显示某些内容?

默认行为似乎是在MyForm(initial = {'passfield':'something'})设置时不显示任何内容。

我需要这个来实现用户编辑表单。我想显示一个随机字符串,如果用户不修改,我会知道他不想更改密码。所以我认为我正在尝试做的事情没有任何安全问题。

4

3 回答 3

27

似乎使用 render_value 参数不仅适用于Django 文档中列出的情况,而且可以使用:

class MyForm(forms.Form):
    password_field = forms.CharField(widget = forms.PasswordInput(render_value = True))
于 2012-10-22T18:58:59.817 回答
0

根据文档,DjangoPasswordField不支持初始值。所以即使你通过它,它也不会渲染。

您可以对该字段进行子类化并制作自己的密码小部件,这将允许您这样做,或者您可以使用 HTML5 placeholder。HTML5 更安全,因为您可以向用户显示某些内容,但不能显示密码本身。

对于 HTML5 支持,您可以使用https://github.com/adamcupial/django-html5-forms。然后你可以做类似的事情(不是精确的语法,而是类似的东西):

class FooForm(forms.Form):
    ...
    password = forms.PasswordField(..., placeholder="Your password here")
于 2012-10-22T18:47:19.960 回答
-1

我遇到了类似的情况,我做了以下事情:

class UserForm(forms.ModelForm):
    password1 = PasswordField(label="Password")

在该字段PasswordFieldPasswordInput,您需要render_value = True按照上面提到的默认设置False,然后在初始化期间UserForm我传递了密码的初始值。

UserForm(instance=user, initial={'password1': settings.dummy_password})

现在这个初始值是在设置文件中预定义的,如果密码被更改,我会比较它然后更新密码,否则保持原样。

于 2014-04-29T18:46:15.483 回答