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

创建提交后跳转至不同URL的表单:Django 404错误排查

问题排查与解决步骤

1. 根路由未关联users应用(404核心原因)

Django项目根目录下的urls.py(不是应用内的)必须把users应用的路由包含进来,否则系统找不到/users/register路径。修改根urls.py:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('cooknookapp.urls')),
    path('users/', include('users.urls'))  # 新增这行,关联users应用路由
]

2. 修复views.py的表单处理逻辑

当前代码里POST请求时没把提交数据传给表单,导致表单永远无法验证通过,而且逻辑顺序错误:

from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm

def register(response):
    if response.method == "POST":
        # 必须把POST数据传入表单
        form = UserCreationForm(response.POST)
        if form.is_valid():
            form.save()
            # 验证通过后再跳转,避免无效提交也跳走
            return redirect('cooknook-home')
    else:
        # GET请求时生成空表单
        form = UserCreationForm()
    # 把form传给模板,覆盖GET和验证失败的场景
    return render(response, 'users/register.html', {'form': form})

3. 模板添加CSRF令牌

Django表单必须加CSRF令牌,否则会触发403错误,修改register.html:

{% extends 'cooknookapp/base.html' %}

{% block title %}
    Create an Account
{% endblock %}

{% block content %}
    <form method="POST" class="form-group">
        {% csrf_token %}  <!-- 新增这一行 -->
        {{form}}
        <button type="submit" class="btn-submit">Sign Up</button>
    </form>
{% endblock %}

4. 可选:用应用命名空间确保重定向准确

如果重定向还是有问题,可以给主应用加命名空间:

  • 在cooknookapp/urls.py顶部加app_name = 'cooknookapp'
  • views里重定向改为redirect('cooknookapp:cooknook-home')

按上述步骤修改后,先解决根路由问题,404错误会消失,再处理表单逻辑和CSRF问题,就能正常完成注册跳转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:24:54