Django注册表单密码未哈希存储问题求助
解决Django用户注册密码未哈希问题
你的问题出在视图中处理密码的方式错误,直接修改form.password和错误调用form.save()参数不会让Django正确处理密码哈希。Django用户模型的密码需要通过set_password()方法来设置,这样才能自动完成哈希处理。
修正后的views.py代码:
from django.contrib.auth.hashers import make_password from django.shortcuts import render, redirect def addUser(request): if request.method == 'GET': form = AddNewUserForm() return render(request, 'addNewUser.html', {'form': form}) if request.method == 'POST': form = AddNewUserForm(request.POST) if form.is_valid(): # 先创建用户实例但不提交到数据库 user = form.save(commit=False) # 使用set_password方法设置哈希后的密码 user.set_password(form.cleaned_data['password']) # 提交保存用户 user.save() print("New user added!") return redirect('/users/') return redirect('/users/')
关键修正点:
- 使用
form.save(commit=False)获取未提交到数据库的用户实例,方便在保存前修改实例属性 - 调用用户实例的
set_password()方法传入明文密码,Django会自动处理哈希,这和Admin面板的处理逻辑完全一致 - 最后调用
user.save()完成数据库提交
额外说明:
- 确保你的
AddNewUserForm基于Django内置的UserCreationForm或自定义用户模型表单,且用户模型继承了AbstractBaseUser(内置User模型默认继承),这样才会有set_password()方法 - 原代码中
form.save(make_password(...))是错误写法,save()方法没有该参数定义,这行代码完全不起作用
内容的提问来源于stack exchange,提问作者user13372981
相关产品推荐
相关产品推荐

