繁体   English   中英

Django脆皮形式将密码显示为明文

[英]Django crispy forms shows password as clear text

Crispy 表单目前将我的密码字段显示为明文。 我尝试了以下操作,但仍然无法使用 type=password。

Fieldset(
            'Enter a password.',
            PrependedText('password', '<i class="fa fa-key"></i>',
                          placeholder='Password',
                          autocomplete='off',
                          widget=forms.PasswordInput,
                          ),
        ),

我也厌倦了type="password"没有效果。

我没有错误。

我 99.9% 肯定您没有将小部件添加到表单字段声明中。 你应该有这样的东西才能显示密码字段:

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自己。 这是第 3 种方法的示例。

class MyModelForm(forms.ModelForm):
    class Meta:
        fields = (... fields you want to include in the form ...)

    password = forms.CharField(widget=forms.PasswordInput, ...)

请注意,通过提供模型表单字段覆盖,您还必须提供标签、help_text(等)等属性,因为它们不会从模型字段自动复制。

我在使用crispy-formscrispy-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>

您需要定义 PasswordInput。

class YourForm(forms.ModelForm):

password = forms.CharField(label='Enter Password',widget=forms.PasswordInput(attrs={'placeholder': 'alphanumeric password'}))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM