You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 07:22:55