Добавление возвращаемого form_invalid (или чего-то еще) с пользовательскими ошибками формы в пользовательскую форму регистрации с помощью django-allauth - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь запретить повторяющиеся регистрации с одного ip.Вот мой код.

class SignupForm(forms.Form):

    def signup(self, request, user):
        ip = get_client_ip(request)
        if UserProfile.objects.filter(registration_ip=ip).exists():
            self.add_error(
                None, "You cannot register more than one account from the same IP")
        else:
            user.userprofile.registration_ip = ip
            user.userprofile.save()
            user.save()

В настоящее время, когда пользователь регистрируется с тем же IP-адресом, что и другой зарегистрированный пользователь, форма все еще проверяется.Мне нужна форма для возврата ошибки.Кто-нибудь может помочь?Заранее спасибо.

(Приведенный выше код является переопределением для RegistrationForm пакета django-allauth)

Оператор if работает нормально.Сначала я пытался использовать raise ValidationError, и это работало нормально, но это плохо для UX.Мне нужна форма для аннулирования и возврата моей пользовательской ошибки на странице формы.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Используйте функцию очистки:

def clean_registration_ip(self):
    registration_ip = self.cleaned_data.get('registration_ip')
    if : # your logic
        raise forms.ValidationError("Your msg")
    return registration_ip
0 голосов
/ 22 января 2019

Эта фильтрация возвращает istance и не проверяет IP, если они одинаковые или нет, просто проверяет, существуют ли они.
Сначала вам нужно сделать uniqe registration_ip через Model.
Затем вы можете использовать метод clean через такие формы, как:

def clean_registration_ip(self,request):
     registration_ip = self.cleaned_data['registration_ip']
     if UserProfile.objects.filter(registration_ip=registration_ip).exists():
          raise forms.ValidationError("This IP exist")
     return registration_ip
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...