Django crispy表单显示密码为明文
Crispy forms现在把我的密码框显示成明文,也就是可以直接看到我输入的密码。我尝试了以下方法,但还是没法让它变成密码框,也就是用type=password。
Fieldset(
'Enter a password.',
PrependedText('password', '<i class="fa fa-key"></i>',
placeholder='Password',
autocomplete='off',
widget=forms.PasswordInput,
),
),
我也试过用type="password"
,但是没有任何效果。
我没有收到错误提示。
4 个回答
0
对我来说是有效的:forms.py 文件。
class Meta:
model = NewUser
fields = ('email', 'password')
// add this to make password field 'password' type
widgets = {
'password': forms.PasswordInput(attrs={'type': 'password'}),
}
0
你需要定义一个叫做 PasswordInput 的东西。
class YourForm(forms.ModelForm):
password = forms.CharField(label='Enter Password',widget=forms.PasswordInput(attrs={'placeholder': 'alphanumeric password'}))
2
我在使用 crispy-forms
和表单集的时候从来没有过好运,所以我直接在模板里使用表单。你可以试试看这样是否有效:
<form method="post">{% csrf_token %}
{{ formset.management_form|crispy }}
{% for form in formset %}
<input id="id_form-{{ forloop.counter0 }}-id" name="form-{{ forloop.counter0 }}-id" type="hidden" value="{{ form.instance.pk }}"/>
{{ form|crispy }}
{% endfor %}
</form>
6
我几乎可以肯定,你在表单字段的声明中漏掉了小部件的添加。为了显示一个密码输入框,你应该这样写:
class MyForm(forms.Form):
...
password = forms.CharField(widget=forms.PasswordInput)
...
布局应该简单明了,如下所示:
Layout(
PrependedText('password', '@', placeholder="password", autocomplete='off')
)
widget=
这个参数是在Django的forms.CharField
构造函数中定义的,而不是在django-cryspy-forms的bootstrap.PrependedText
构造函数中。
你可以在这里找到更多关于Django表单字段的信息:这里。
更新
如果你有一个模型表单,它是根据你的模型构建的,可以是自动生成的(比如使用管理界面),也可以通过使用modelform_factory
,或者自己定义ModelForm。下面是第三种方法的一个例子。
class MyModelForm(forms.ModelForm):
class Meta:
fields = (... fields you want to include in the form ...)
password = forms.CharField(widget=forms.PasswordInput, ...)
请注意,当你提供模型表单字段的覆盖时,你还需要提供一些属性,比如标签、帮助文本等,因为这些不会自动从模型字段中复制过来。