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

Django普通用户注册提交时出现404路径错误求助

Django注册提交后404错误修复

问题根源

提交表单后出现http://127.0.0.1:8000/register/register的404错误,核心原因是HTML表单的action属性使用了相对路径"register"。当前页面路径为/register/,浏览器会自动将相对路径拼接到当前路径后,形成不存在的/register/register路径,而你的URLconf中仅配置了register/规则,导致路径匹配失败。

解决方案

1. 修正表单的action属性

推荐使用Django的url标签反向解析URL,这种方式不受后续URL规则修改的影响,更可靠:

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

    <input type="text" name="first_name" placeholder="First name"><br>
    <input type="text" name="last_name" placeholder="Last name"><br>
    <input type="text" name="username" placeholder="Username"><br> <!-- 原代码type="username"不符合HTML标准,改为text -->
    <input type="email" name="email" placeholder="Email"><br>
    <input type="password" name="password" placeholder="password"><br>
    <input type="password" name="confirm_password" placeholder="confirm_password"><br>
    <input type="submit" name="submit" value="Register">
</form>

也可以直接将action设为空字符串,让表单提交到当前页面的URL:

<form action="" method="post">

2. 优化视图重定向与校验逻辑

视图中return redirect(home)如果home是视图函数,需确保URLconf中给首页视图设置了name='home',否则建议改为更通用的写法:

return redirect('home')  # 对应urls里的name='home'
# 或直接使用绝对路径
return redirect('/')

同时建议恢复注释掉的密码校验、用户存在性检查逻辑,避免无效用户创建:

def register(request):
    if request.method=="POST":
        first_name=request.POST.get('first_name')
        last_name=request.POST['last_name']
        username=request.POST['username']
        email=request.POST['email']
        password=request.POST['password']
        confirm_password=request.POST['confirm_password']

        if password != confirm_password:
            print("Password and Confirm Password Does Not Match")
            return render(request, "register.html", {'error': '密码与确认密码不匹配'})
        if User.objects.filter(username=username).exists():
            print("Username Already Taken")
            return render(request, "register.html", {'error': '用户名已存在'})
        if User.objects.filter(email=email).exists():
            print("Email Already Taken")
            return render(request, "register.html", {'error': '邮箱已被使用'})
        
        user=User.objects.create_user(username=username,password=password,email=email,first_name=first_name,last_name=last_name)
        user.save()
        print("User Created")
        return redirect('home')

    else:
       return render(request,"register.html")

验证修改

完成上述调整后,提交表单时会正确POST到/register/路径,视图处理完成后将重定向到首页,404问题即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:13:20