【问题标题】:How to confirm password in Django?如何在 Django 中确认密码?
【发布时间】:2015-11-28 01:31:43
【问题描述】:

我正在尝试使用 PasswordInput() 以安全的方式确认用户密码,但 Django 似乎只允许每个表单使用一个 PasswordInput()。以下是实施确认密码的最佳方法:

class VerifyAccountsForm(forms.ModelForm):
    username = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Username'}), label="")
    password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Password'}), label="")
    password_verify = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Verify password'}), label="")

    def clean_password(self):
        print self.cleaned_data
        password1 = self.cleaned_data.get('password')
        password2 = self.cleaned_data.get('password_verify')
        if not password2:
            raise forms.ValidationError("You must confirm your password")
        if password1 != password2:
        raise forms.ValidationError(_('Your passwords do not match'), code='invalid') 
        return password2

clean_data的输出只有用户名和密码,没有password_verify。

【问题讨论】:

    标签: django django-forms django-views


    【解决方案1】:

    如果你使用django自己的usercreationform,你可以同时拥有两个字段,here is how I used it

    form 的clean_password2() 函数比较两个密码输入并验证它们,returns the second password

    【讨论】:

    • 谢谢。是否可以在不使用模型的情况下实现这一点,但仍然可以安全地实现它?
    • @HC 当然,你可以做到
    【解决方案2】:

    我不知道是什么让您认为 Django 只允许每个表单输入一个密码。你可以拥有任意数量,Django 不会阻止你。

    请注意,您当前的代码是在验证密码时调用的,但会返回 password_verify 的值。

    但是,如果您从 clean_data 中得到了您不期望的东西,您应该发布 clean 方法的代码。

    【讨论】:

      【解决方案3】:

      def clean_password(self): 更改为def clean_password2(self): in forms.py 和 HTML 注册表单(registraton.html)在密码输入字段上方写上{{ form.password2.errors.as_text }}

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-15
        • 2021-04-21
        • 2013-03-06
        • 1970-01-01
        • 2016-04-09
        • 1970-01-01
        • 2013-05-02
        • 1970-01-01
        相关资源
        最近更新 更多