форма сброса пароля, собственный метод очистки - PullRequest
1 голос
/ 07 августа 2010

Я хочу написать свой собственный метод для формы сброса пароля, чтобы выполнить некоторые проверки нового пароля (длина, символы, ...). Поэтому я добавил этот класс в мои forms.py:

class PasswordResetForm(SetPasswordForm):
  def clean(self):
    if 'newpassword1' in self.cleaned_data and 'newpassword2' in self.cleaned_data:
      if self.cleaned_data['newpassword1'] != self.cleaned_data['newpassword2']:
        raise forms.ValidationError(("The two password fields didn't match."))

      #here the passwords entered are the same
      if len(self.cleaned_data['newpassword1']) < 8:
        raise forms.ValidationError(("Your password has to be at least 8 characters long"))

      if not re.search('\d+', self.cleaned_data['newpassword1']) or not re.search('([a-zA-Z])+', self.cleaned_data['new  password1']):
        raise forms.ValidationError(("Your password needs to contain at least one number and one character"))

      return self.cleaned_data

и в urls.py я добавил это:

url(r'^reset/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$', django.contrib.auth.views.password_reset_confirm, {'template_name':'registration/password_reset_confirm.html',
                                                                                                                                   'set_password_form': PasswordResetForm})

Но мой собственный метод очистки не вызывается. Что не так с этим?

Ответы [ 2 ]

0 голосов
/ 14 августа 2010

Я нашел ошибку. Это была ошибка в моем urls.py. Это должно было быть:

url(r'^password/reset/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$',django.contrib.auth.views.password_reset_confirm,{'template_name':'registration/password_reset_confirm.html','set_password_form': PasswordResetForm})

Я не знаю, почему я все еще получил форму для сброса пароля, а не 404. Возможно, кто-то может сказать мне. Я немного обеспокоен тем, что все еще может быть возможный способ использования стандартной формы сброса.

0 голосов
/ 07 августа 2010

этот ответ может показаться глупым, и у меня нет обоснования, но я столкнулся с той же проблемой, и решил ее, заменив

self.cleaned_data.get('newpassword1')

навесь набор чистых данных:

class PasswordResetForm(SetPasswordForm):
def clean(self):
  cleaned_data = self.cleaned_data
  if 'newpassword1' in cleaned_data and 'newpassword2' in cleaned_data:
     if cleaned_data.get('newpassword1') != cleaned_data.get('newpassword2'):
       raise forms.ValidationError(("The two password fields didn't match."))


     if len(cleaned_data.get('newpassword1')) < 8:
      raise forms.ValidationError(("Your password has to be at least 8 characters long"))

     if not re.search('\d+', cleaned_data.get('newpassword1')) or not re.search('([a-zA-Z])+', cleaned_data.get('new  password1')):
      raise forms.ValidationError(("Your password needs to contain at least one number and one character"))

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