Django - очистка пароля завершается неудачно, если задана min_length - PullRequest
1 голос
/ 16 июля 2010

У меня есть форма регистрации пользователя, в которой есть поля «пароль» и «подтвердить пароль».Когда я добавляю «min_length» в поле моего пароля и затем запускаю отправленные данные с помощью моего собственного метода clean_confirm_password, он выдает ошибку «Key Error / Password».

Это происходит, когда поле пароля меньше 5 символов, совпадает ли поле verify_password или нет.

Я пытался добавить «min_length» к «verify_password», но все равно получаю ту же ошибку.

Все работает нормально, когда я полностью удаляю «min_length».

Любая помощь приветствуется!

Мой файл forms.py:

class NewUser(forms.Form):
    email = forms.EmailField(max_length=75)
    first_name = forms.CharField(max_length=45)
    last_name = forms.CharField(max_length=45)
    password = forms.CharField(min_length=5, max_length=30, widget=forms.PasswordInput(render_value=False))
    confirm_password = forms.CharField(max_length=30, widget=forms.PasswordInput(render_value=False))

    def clean_confirm_password(self):
        confirm_password = self.cleaned_data['confirm_password']
        original_password = self.cleaned_data['password']
        if original_password != confirm_password:
            raise forms.ValidationError("Password doesn't match")

        return confirm_password

Ответы [ 2 ]

2 голосов
/ 16 июля 2010

Когда вы отправляете пароль длиной менее 5 символов, он не проходит проверку min_length, поэтому password отсутствует в словаре cleaned_data вашей формы. Когда вы пытаетесь получить доступ к отсутствующему ключу, вы получаете KeyError.

Вместо этого вы должны попробовать:

original_password = self.cleaned_data.get('password', '')

, который вернет '', если пароль слишком короткий.

Кроме того, метод clean_myfieldname должен опираться только на одно поле. Если вы хотите очистить и проверить поля, которые зависят друг от друга, используйте для этого метод clean (см. документы django ).

0 голосов
/ 16 июля 2010

Когда вы обращаетесь к self.cleaned_data, форма проверяет все свои поля, что приведет к тому, что поле пароля будет проверено по аргументу min_length.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...