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

使用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>

错误排查与修复

  1. 模板变量拼写错误
    模板中循环提示信息的变量写成了massages,正确名称应为messages,这会导致错误提示无法显示,容易误以为代码未执行到对应分支。修改为:

    {% for message in messages %}
    <h5>{{message}}</h5>
    {% endfor %}
    
  2. 多余的user.save()调用
    create_user方法会自动将用户数据保存到数据库,无需额外调用user.save(),可删除该行代码。

  3. 表单action路径问题
    表单的action="register"为相对路径,可能引发路由跳转异常,建议使用Django的URL反向解析确保路径正确:

    <form method="POST" action="{% url 'register' %}">
    

    需确保urls.py中已为register视图设置名称:

    path('register/', views.register, name='register')
    
  4. 调试验证逻辑分支
    在create_user所在分支添加打印日志,确认代码是否进入该逻辑:

    else:
        print("开始创建用户...")
        user = User.objects.create_user(username=username, email=email, password=password2)
        print(f"用户创建成功:{user.username}")
        return redirect('login')
    

    运行项目后查看控制台输出,验证代码执行流程。

  5. 数据库配置检查
    确认项目数据库配置正确,执行python manage.py migrate确保所有迁移文件已应用,避免因数据库未初始化导致用户无法保存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 10:06:22