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

Django表单提交触发RuntimeError,请求协助排查并实现登录页重定向

问题解决指南

核心错误修复

错误提示已明确原因:POST请求指向了不带斜杠的/signup,而Django默认APPEND_SLASH=True,此时无法在重定向时保留POST数据,导致报错。按以下步骤修复:

1. 规范表单提交目标(推荐)

尽管你的表单action已写为/signup/,仍建议改用Django的URL反向解析,彻底避免硬编码路径出错:

<!-- 替换原表单的action属性 -->
<form action="{% url 'signup' %}" method="post">

前提是你在urls.py中给signup的URL配置了名称,示例:

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('signup/', views.signup, name='signup'),
    # 其他URL配置...
]

2. 调整Django全局配置(不推荐)

若不想修改表单和URL规则,可在settings.py中关闭自动补全斜杠:

APPEND_SLASH = False

但此操作不符合Django URL规范,可能引发其他路径兼容问题,不建议使用。

额外代码错误修复

你的views.py和表单代码中存在两处明显错误:

  1. 视图类方法调用错误:
# 错误代码
User.objects.create_user(...)
User.save()  # 此行无效且会报错

create_user方法已自动完成用户对象的创建与保存,save()是实例方法而非类方法,直接删除User.save()即可。

  1. 表单标签拼写错误:
    表单中提交按钮的标签写成了<buttpn>,需修正为<button>,避免页面渲染异常。

优化后的视图代码(添加密码校验)

建议增加两次密码一致性校验,提升用户体验:

def signup(request):
    if request.method == "POST":
        username = request.POST.get("username")
        fname = request.POST.get("fname")
        lname = request.POST.get("lname")
        email = request.POST.get("email")
        password = request.POST.get("password")
        con_password = request.POST.get("con_password")
        
        # 校验两次密码是否一致
        if password != con_password:
            messages.error(request, "两次输入的密码不一致")
            return redirect("signup")
            
        # create_user自动保存对象,无需手动调用save()
        User.objects.create_user(username=username, first_name=fname, last_name=lname, email=email, password=password)
        messages.success(request, "账号创建成功")
        return redirect("login")
    # 处理GET请求,返回注册页面
    return render(request, 'signup.html')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:16:16