有没有办法预先填充 Django 表单密码字段,以便在生成的<input type="password">
html 元素中显示某些内容?
默认行为似乎是在MyForm(initial = {'passfield':'something'})
设置时不显示任何内容。
我需要这个来实现用户编辑表单。我想显示一个随机字符串,如果用户不修改,我会知道他不想更改密码。所以我认为我正在尝试做的事情没有任何安全问题。
有没有办法预先填充 Django 表单密码字段,以便在生成的<input type="password">
html 元素中显示某些内容?
默认行为似乎是在MyForm(initial = {'passfield':'something'})
设置时不显示任何内容。
我需要这个来实现用户编辑表单。我想显示一个随机字符串,如果用户不修改,我会知道他不想更改密码。所以我认为我正在尝试做的事情没有任何安全问题。
似乎使用 render_value 参数不仅适用于Django 文档中列出的情况,而且可以使用:
class MyForm(forms.Form):
password_field = forms.CharField(widget = forms.PasswordInput(render_value = True))
根据文档,DjangoPasswordField
不支持初始值。所以即使你通过它,它也不会渲染。
您可以对该字段进行子类化并制作自己的密码小部件,这将允许您这样做,或者您可以使用 HTML5 placeholder
。HTML5 更安全,因为您可以向用户显示某些内容,但不能显示密码本身。
对于 HTML5 支持,您可以使用https://github.com/adamcupial/django-html5-forms。然后你可以做类似的事情(不是精确的语法,而是类似的东西):
class FooForm(forms.Form):
...
password = forms.PasswordField(..., placeholder="Your password here")
我遇到了类似的情况,我做了以下事情:
class UserForm(forms.ModelForm):
password1 = PasswordField(label="Password")
在该字段PasswordField
中PasswordInput
,您需要render_value = True
按照上面提到的默认设置False
,然后在初始化期间UserForm
我传递了密码的初始值。
UserForm(instance=user, initial={'password1': settings.dummy_password})
现在这个初始值是在设置文件中预定义的,如果密码被更改,我会比较它然后更新密码,否则保持原样。