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
相关产品推荐
相关产品推荐

