【问题标题】:Django password problemsDjango 密码问题
【发布时间】:2011-04-01 17:36:53
【问题描述】:

我正在使用这样的用户模型:

class UserForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('username','password','email',)

但密码字段显示为常规文本字段,而不是密码输入。如何确保它显示密码字段?

我试过了:

class UserForm(forms.ModelForm):
    username = forms.CharField(max_length = 15, min_length = 6)
    password = forms.PasswordInput() 
    class Meta:
        model = User
        fields = ('username','password','email',)

但这也不起作用。

我也在尝试像这样添加一个确认密码字段,但这会导致不显示任何字段:

class UserForm(forms.ModelForm):
    username = forms.CharField(max_length = 15, min_length = 6)
    password = forms.PasswordInput()
    cpassword = forms.PasswordInput()

    def clean(self):
        if self.cleaned_data['cpassword']!=self.cleaned_data['password']:
            raise forms.ValidationError("Passwords don't match")

    class Meta:
        model = User
        fields = ('username','password','cpassword','email',)

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    您忽略了表单字段和表单小部件之间的区别。小部件是该字段的 HTML 表示形式。如果您使用的是 Django 1.2,则可以使用以下语法:

    编辑:更新以包含确认密码

    class UserForm(forms.ModelForm):
    
        confirm_password = forms.CharField(widget=forms.PasswordInput())
    
        class Meta:
            model = User
            fields = ('username','password','email',)
            widgets = {
                'password': forms.PasswordInput(),
            }
    

    【讨论】:

    • 谢谢,我不知道你可以这样做,确认密码也是一样的吗?
    • 由于该字段不在模型中,您需要单独声明它...我会更新我的答案
    • 我仍然不确定我为什么必须将 PasswordInput 指定为 CharField 的小部件。它们都是形式,不是吗?为什么我不能只使用 PasswordInput?谢谢!
    • 表单域和表单小部件是有区别的。你可以这样想——表单字段决定了python应该如何处理字段(验证、类型等)。表单小部件是 HTML 表示。在您的情况下,您想要处理字符输入,但您希望 HTML 显示密码输入。
    • 在第三行你有 form 作为单数,我假设它应该是复数
    猜你喜欢
    • 2020-10-15
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 2015-06-20
    相关资源
    最近更新 更多