Django注册表单调用create_user无报错却未创建新用户问题咨询
问题根源
核心问题是方法名拼写错误导致自定义逻辑完全未执行:
在users/views.py的StudentSignupView类中,你把表单验证通过后的回调方法名form_valid错写成了form_vaild(字母a和i顺序颠倒)。
Django的FormView类只会调用约定好的form_valid方法处理验证通过的逻辑,你写错方法名后,请求就直接走了父类默认的form_valid逻辑:直接跳转success_url,不会执行你写的表单保存、用户认证登录代码,自然不会创建新用户。
解决方法
直接修改方法名即可:
# 把原来的def form_vaild(self, form): 替换为如下代码 def form_valid(self, form): form.save() email = form.cleaned_data.get("email") password = form.cleaned_data.get("password") user = authenticate(self.request, username=email, password=password) if user is not None: login(self.request, user) return super().form_valid(form)
可选优化点
- 表单
StudentSignUpForm的clean_password_confirm方法最后建议返回password_confirm而非password,符合Django表单clean方法的规范,虽然不影响当前功能,但可以避免后续出现隐性问题。 - 你自定义的用户模型有
account_type字段区分学生和普通用户,目前save方法创建用户时没有给该字段赋值,建议在创建用户时添加user.account_type = User.ACCOUNT_TYPE_STUDENT,避免后续用户身份校验出问题。
内容的提问来源于stack exchange,提问作者beomseok.choi
相关产品推荐
相关产品推荐

