Отклонение сообщения формы после is_valid

Я пытаюсь переписать RegistrationView, который является частью django registration redux.

https://github.com/macropin/django-registration/blob/master/registration/backends/default/views.py

По сути, я хочу реализовать логику, которая предотвращает регистрацию при наличии некоторого условия. Проверка этого условия требует доступа к запросу.

Я думаю, что смогу подклассифицировать функцию register в этом представлении, основанном на классе.

  def register(self, form):

        #START OF MY CODE
        result = test_for_condition(self.request)
        if result == False:
            messages.error(self.request, "Registration cannot be completed.", extra_tags='errortag')
            return redirect('/access/register')
        #END OF MY CODE
      
        site = get_current_site(self.request)

        if hasattr(form, 'save'):
            new_user_instance = form.save(commit=False)
        else:
            new_user_instance = (UserModel().objects
                                 .create_user(**form.cleaned_data))

        new_user = self.registration_profile.objects.create_inactive_user(
            new_user=new_user_instance,
            site=site,
            send_email=self.SEND_ACTIVATION_EMAIL,
            request=self.request,
        )
        signals.user_registered.send(sender=self.__class__,
                                     user=new_user,
                                     request=self.request)
        return new_user

Каким образом это можно сделать, используя представления на основе классов? До сих пор я работал почти исключительно с представлениями на основе функций.

Спасибо!

Насколько я знаю, для управления пользователями в Django рекомендуется использовать подклассы "AsbtractBaseUser" и "BaseUserManager".

В CustomUserModel вы можете определить обязательные поля, добавленные к существующим полям из BaseUserManager.

В CustomUserManager вы можете переопределить create_user, create_staff_user, create_superuser и save_user. Вы можете определить несколько условий, которые должны быть проверены перед регистрацией пользователя, а также добавить разрешения или группы пользователю на основе роли в методе "save_user.

Создайте CustomRegistrationSerializer, который управляет полями, которые должны отображаться на странице регистрации, также может быть определена валидация этих полей.

В методе POST CBV вы можете проверить условие, которое требует "запрос" перед сериализацией данных. Если условие выполнено, можно продолжить сериализацию и сохранение, в противном случае можно вернуть соответствующий ответ.

Django : https://docs.djangoproject.com/en/3.2/topics/auth/customizing/#extending-the-existing-user-model

Вернуться на верх