Практические проекты на Django — страница 168

#python #django #project

#python #django #проект

Вопрос:

На странице 168 есть два фрагмента кода :

 def clean_password2(self):
   if self.cleaned_data['password1'] != self.cleaned_data['password2']:
      raise forms.ValidationError("You must type the same password each time")
   return self.cleaned_data['password2']

def clean(self):
   if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:
      if self.cleaned_data['password1'] != self.cleaned_data['password2']:
         raise forms.ValidationError("You must type the same password each time")
   return self.cleaned_data
  

Во втором случае код проверяет, имеют ли ‘password1’ и ‘password2’ какое-либо значение. В первом случае такой проверки нет. Почему?

Ответ №1:

В clean_password2 вы проверяете password2 поле, поэтому вы уверены, что оно существует в этой форме, и вам не нужно проверять его существование в self.cleaned_data . Однако это не означает, что они также не могли проверить наличие password1 .

clean Метод проверяет всю форму и не дает никаких гарантий того, что присутствует.

Комментарии:

1. Большое спасибо вам обоим. Я ищу код, который позволяет пользователям подписываться, только если они были приглашены (немного похоже на Quora). Где я могу это найти? Спасибо.

Ответ №2:

clean_password2 метод выполняет очистку поля, в данном случае поля password2. ( docs )

clean метод вызывается после проверки отдельных полей. Это хорошее место для проверки нескольких полей в соответствии с документами.

Подробнее here .