在is_valid之后拒绝表单发布



我正在尝试覆盖RegistrationView,它是django注册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

使用基于类的视图进行此操作的正确方法是什么?到目前为止,我几乎只处理基于函数的视图。

谢谢!

据我所知,建议将"AsbtractBaseUser";以及";BaseUserManager";用于Django中的用户管理。

在CustomUserModel中,可以定义从BaseUserManager添加到现有字段中的必需字段。

在CustomUserManager中,您可以覆盖create_user、create_staff_user、create_superuser和save_user。您可以定义在注册用户之前应该检查的一些条件,也可以根据"中的角色向用户添加权限或组;save_user";方法

创建CustomRegistrationSerializer,它控制需要在注册页面上显示的字段,还可以定义这些字段的验证。

在CBV的POST方法中,您可以检查需要";请求";在序列化数据之前。若满足条件,则可以继续序列化和保存。否则,可以返回适当的响应。

Django:https://docs.djangoproject.com/en/3.2/topics/auth/customizing/#extending-现有的用户模型

最新更新