使用Django的create_user创建新用户失败问题求助
Django create_user 创建用户失败排查方案
问题代码
视图函数
from django.contrib.auth.models import User from django.shortcuts import render, redirect from django.contrib import messages def register(request): if request.method == "POST": username = request.POST['username'] email = request.POST['email'] password = request.POST['password'] password2 = request.POST['password2'] if password == password2: if User.objects.filter(email=email).exists(): messages.info(request, 'Email Already Used') return redirect('register') elif User.objects.filter(username=username).exists(): messages.info(request, 'Username Already Used') return redirect('register') else: user = User.objects.create_user(username=username, email=email, password=password2) # create_user not working user.save() return redirect('login') else: messages.info(request, 'password not same') return redirect('register') else: return render(request, 'register.html')
模板文件(register.html)
<h1>SIGN UP HERE</h1> <style> h5 { color: red } </style> {% for message in massages %} <h5>{{message}}</h5> {% endfor %} <form method="POST" action="register"> {% csrf_token %} <p>Username(admission number):</p> <input type="text" name="username" /> <P>Email</P> <input type="email" name="email" /> <p>Password:</p> <input type="password" name="password" /> <p>Repeat password</p> <input type="password" name="password2" /><br> <input type="submit" /> </form>
错误排查与修复
模板变量拼写错误
模板中循环提示信息的变量写成了massages,正确名称应为messages,这会导致错误提示无法显示,容易误以为代码未执行到对应分支。修改为:{% for message in messages %} <h5>{{message}}</h5> {% endfor %}多余的
user.save()调用create_user方法会自动将用户数据保存到数据库,无需额外调用user.save(),可删除该行代码。表单action路径问题
表单的action="register"为相对路径,可能引发路由跳转异常,建议使用Django的URL反向解析确保路径正确:<form method="POST" action="{% url 'register' %}">需确保urls.py中已为register视图设置名称:
path('register/', views.register, name='register')调试验证逻辑分支
在create_user所在分支添加打印日志,确认代码是否进入该逻辑:else: print("开始创建用户...") user = User.objects.create_user(username=username, email=email, password=password2) print(f"用户创建成功:{user.username}") return redirect('login')运行项目后查看控制台输出,验证代码执行流程。
数据库配置检查
确认项目数据库配置正确,执行python manage.py migrate确保所有迁移文件已应用,避免因数据库未初始化导致用户无法保存。
内容的提问来源于stack exchange,提问作者adi
相关产品推荐
相关产品推荐

