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

Django创建auth_user用户时set_password缺少必填参数报错求助

问题修复方案

错误原因

  • set_password是User模型实例的方法,不能直接用User类调用,必须通过你查询得到的myuser实例对象调用,你当前用User.set_password('pass1')调用时,方法接收不到实例本身的self参数,所以会提示缺少必填参数。
  • 调用set_password时传参错误,你传了字符串'pass1',应该传存储用户输入密码的变量pass1,不需要加引号。
  • 调用set_password后不需要再手动给myuser.password赋值,set_password会自动将明文密码哈希加密后赋值给实例的password字段,手动赋值会把加密后的密码覆盖为明文,导致密码校验失效。
  • 额外问题:注册场景下新用户还未创建,用User.objects.get()查询不存在的用户会抛出DoesNotExist异常,同时你的代码缺少两次密码一致性校验逻辑。

修复后代码

def registerpage(request):
    if request.method == 'POST':
        myusername = request.POST['name']
        email = request.POST['email']
        pass1 = request.POST['password1']
        pass2 = request.POST['password2']

        # 校验两次密码是否一致
        if pass1 != pass2:
            # 可根据业务需求补充错误提示返回逻辑
            return render(request, 'register.html', {'error': '两次输入的密码不一致'})
        
        # 校验用户名是否已存在
        if User.objects.filter(username=myusername).exists():
            return render(request, 'register.html', {'error': '用户名已被占用'})
        
        # 使用Django自带create_user方法创建用户,自动处理密码加密
        myuser = User.objects.create_user(
            username=myusername,
            email=email,
            password=pass1
        )
        myuser.save()
        return redirect('testlogin')
    # GET请求返回注册页面
    return render(request, 'register.html')

内容的提问来源于stack exchange,提问作者Dcoder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:36:07