Django crispy表单显示密码为明文

3 投票
4 回答
3215 浏览
提问于 2025-04-18 09:48

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, ...)

请注意,当你提供模型表单字段的覆盖时,你还需要提供一些属性,比如标签、帮助文本等,因为这些不会自动从模型字段中复制过来。

撰写回答