Django使用ModelForm实现注册功能时出现无效密码格式或未知哈希算法错误
问题根源
Django 内置的 User 模型要求密码必须经过哈希加密后再存储,你当前直接使用 ModelForm 的默认 save 逻辑,会将用户提交的明文密码直接写入数据库,不符合 Django 的密码存储规则,因此后台会提示密码格式无效。
修复方法
在你的 UserSignUpForm 表单类中添加重写的 save 方法,调用 Django 封装好的 set_password 方法自动完成密码哈希加密,代码如下:
class UserSignUpForm(forms.ModelForm): # 你原有写的__init__、字段定义、Meta、clean方法等内容保持不变 # 新增以下save方法 def save(self, commit=True): user = super(UserSignUpForm, self).save(commit=False) # 将明文密码加密后再赋值给user对象 user.set_password(self.cleaned_data["password"]) if commit: user.save() return user
注意事项
- 原有视图代码不需要做任何修改,表单的 save 方法重写后,视图中调用
form.save()时会自动走加密逻辑 - 你的密码一致性校验逻辑无需调整,只要确保两次密码一致后
cleaned_data中能正常取到 password 字段即可
内容的提问来源于stack exchange,提问作者darek_82
相关产品推荐
相关产品推荐

