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