在Django中预先填充密码字段?

时间:2012-10-22 18:27:24

标签: django django-forms

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

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

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

3 个答案:

答案 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})

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