Отклонение сообщения формы после 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