Проверка пользовательской формы - PullRequest
40 голосов
/ 31 октября 2011

У меня довольно простая форма:

from django import forms

class InitialSignupForm(forms.Form):
    email = forms.EmailField()
    password = forms.CharField(max_length=255, widget = forms.PasswordInput)
    password_repeat = forms.CharField(max_length=255, widget = forms.PasswordInput)

    def clean_message(self):
        email = self.clean_data.get('email', '')
        password = self.clean_data.get('password', '')
        password_repeat = self.clean_data.get('password_repeat', '')

        try:
            User.objects.get(email_address = email)
            raise forms.ValidationError("Email taken.")
        except User.DoesNotExist:
            pass

        if password != password_repeat:
            raise forms.ValidationError("The passwords don't match.")

Так ли выполняется проверка пользовательских форм?Мне нужно оценить на email, что в настоящее время нет пользователей с таким адресом электронной почты.Мне также нужно оценить совпадение password и password_repeat.Как я могу сделать это?

1 Ответ

106 голосов
/ 31 октября 2011

Чтобы проверить отдельное поле самостоятельно, вы можете использовать метод clean_FIELDNAME () в своей форме, поэтому для электронной почты:

def clean_email(self):
    email = self.cleaned_data['email']
    if User.objects.filter(email=email).exists():
        raise ValidationError("Email already exists")
    return email

затем для совместно зависимых полей, которые зависят друг от друга, вы можете перезаписать метод форм clean(), который запускается после того, как все поля (как email выше) были проверены по отдельности:

def clean(self):
    form_data = self.cleaned_data
    if form_data['password'] != form_data['password_repeat']:
        self._errors["password"] = ["Password do not match"] # Will raise a error message
        del form_data['password']
    return form_data

Я не уверен, откуда вы взяли clean_message(), но похоже, что это метод проверки, созданный для поля message, которое, по-видимому, не существует в вашей форме.

Прочтите это для более подробной информации:

https://docs.djangoproject.com/en/dev/ref/forms/validation/

...