Django密码字段输入显示为明文forms.PasswordInput宣言

2024-05-05 21:49:13 发布

您现在位置:Python中文网/ 问答频道 /正文

Django密码字段输入显示为明文,尽管widget=forms.PasswordInput声明:

在表单.py在

from django.contrib.auth.models import User
class LoginForm(forms.ModelForm):
    # specify password type so that passwords show up as *******, not plaintext
    # but this doesn't work if placeholder = ''
    password = forms.CharField(widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ["username", "password"]

    def __init__(self, *args, **kwargs):
        # first call the 'real' __init__()
        super(LoginForm, self).__init__(*args, **kwargs)
        # then do extra stuff:
        self.fields['username'].help_text = ''
        self.fields['password'].widget = forms.TextInput(attrs={'placeholder': ''})
        self.fields['password'].widget.attrs['class'] = 'form-control'

所以有趣的是,当我在模板中显示这个表单时,password值显示为纯文本而不是'*****'文本。但前提是我加上'placeholder': ''行。我检查了form元素,发现当我添加'placeholder': ''行时,type='password'在呈现的HTML的<input type='FOO'></input>元素中被改为type='text'。在

-->gt;如何防止这种情况发生,使密码继续以明文形式显示,而不删除'placeholder': ''行?在


Tags: self密码表单fieldsinittypeusernameforms
1条回答
网友
1楼 · 发布于 2024-05-05 21:49:13

您不应将forms.TextInput用作密码字段。Django provides a PasswordInput widget那更合适。试试这个:

class Meta:
    model = User
    fields = ["username", "password"]

def __init__(self, *args, **kwargs):
    # first call the 'real' __init__()
    super(LoginForm, self).__init__(*args, **kwargs)
    # then do extra stuff:
    self.fields['username'].help_text = ''
    self.fields['password'].widget = forms.PasswordInput(attrs={'placeholder': ''})
    self.fields['password'].widget.attrs['class'] = 'form-control'

虽然您可以手动编辑字段的类型,但最好使用小部件。在

相关问题 更多 >