Django中User.objects.create_user()无法创建用户记录求助
Django用户创建失败的解决方案
核心错误修正
你的代码里最关键的错误是获取POST参数的语法错误:
原代码使用request.get.POST('username')是错误写法,Django中正确获取POST参数的方式是request.POST.get('参数名'),参数顺序颠倒会导致所有参数无法获取有效值,最终创建用户的逻辑因参数无效静默失败。
完整修复后的视图代码
from django.contrib.auth.models import User from django.shortcuts import redirect, render from django.contrib import messages def user_signup(request): if request.method == 'POST': # 修正POST参数获取方式 user_name = request.POST.get('username') email = request.POST.get('email') phone_no = request.POST.get('phone') pass1 = request.POST.get('pass1') pass2 = request.POST.get('pass2') # 1. 验证两次密码是否一致 if pass1 != pass2: messages.error(request, "两次输入的密码不一致") return render(request, 'signup_page.html') # 2. 验证用户名/邮箱是否已存在(避免静默失败) if User.objects.filter(username=user_name).exists(): messages.error(request, "该用户名已被注册") return render(request, 'signup_page.html') if User.objects.filter(email=email).exists(): messages.error(request, "该邮箱已被注册") return render(request, 'signup_page.html') # 3. 创建用户(create_user方法会自动保存,无需再调用save()) user = User.objects.create_user(username=user_name, email=email, password=pass1) # 若自定义模型需存储手机号,假设模型为Profile并关联User,可添加以下代码 # from .models import Profile # Profile.objects.create(user=user, phone_no=phone_no) messages.success(request, "账号注册成功,请登录") print('user created') return redirect('user_signin') return render(request, 'signup_page.html')
额外注意事项
create_user方法会自动将用户保存到数据库,无需额外调用user.save(),重复调用属于冗余操作。- 添加表单验证逻辑(密码一致性、用户名/邮箱唯一性),通过
messages框架给前端返回明确提示,避免用户操作后无法得知失败原因。 - 检查前端表单输入框的
name属性是否与后端获取的参数名完全匹配(比如前端name="username"对应后端request.POST.get('username')),属性不匹配也会导致参数获取失败。
内容的提问来源于stack exchange,提问作者AthulRajagopal
相关产品推荐
相关产品推荐

