创建提交后跳转至不同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
相关产品推荐
相关产品推荐

