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

Django模型未在Admin显示,表单提交CSRF令牌及数据出现在URL栏

解决你的两个Django问题

问题1:自定义Contact模型未在Admin后台显示

这是新手入门Django时很常见的小问题——Django不会自动把你自定义的模型加入Admin后台,必须手动完成注册操作。

解决方案:

找到你定义Contact模型的app(看起来是prop)下的admin.py文件,添加以下代码:

from django.contrib import admin
from .models import Contact  # 导入你的Contact模型

# 注册模型到Admin站点
admin.site.register(Contact)

保存后重启Django服务器,刷新Admin后台就能看到Contact模型的管理入口了。


问题2:表单提交变为GET请求,数据暴露在URL中

从你的请求日志和代码细节来看,核心问题是表单提交路径不匹配,再加上视图逻辑的小疏漏,导致POST请求被自动转为GET。

原因分析:

  1. 模板里表单的action写死为"/contact",但你的请求日志显示实际请求路径是"/prop/contact/"——说明你的URL配置里contact视图是挂载在/prop/前缀下的。当POST请求发送到不存在的/contact路径时,服务器会返回重定向响应,而浏览器会自动把POST请求转为GET,同时把表单数据拼到URL里。
  2. 你的视图处理完POST请求后直接用render返回页面,没有做重定向,这不仅会导致刷新页面时重复提交表单,也会让浏览器的请求状态出现异常。

解决方案:

步骤1:用URL反向解析避免硬编码路径

先给你的contact视图设置名称,在prop/urls.py里修改:

from django.urls import path
from . import views

urlpatterns = [
    # 其他URL配置...
    path('contact/', views.contact, name='contact'),  # 增加name参数
]

然后修改模板中的表单action,用Django的模板标签动态生成正确路径:

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

这样不管你的URL前缀怎么调整,表单都会提交到正确的地址。

步骤2:修改视图逻辑,POST后重定向

更新contact视图函数,保存数据后用redirect跳转,而不是直接渲染页面:

from django.shortcuts import render, redirect
from .models import Contact

def contact(request):
    if request.method == 'POST':
        name = request.POST['name']
        email = request.POST['email']
        phone = request.POST['phone']
        desc = request.POST['desc']
        contact = Contact(name=name, email=email, phone=phone, desc=desc)
        contact.save()
        # 重定向到contact页面,也可以自定义一个提交成功的页面
        return redirect('contact')
    # GET请求时返回表单页面
    return render(request, 'prop/contact.html')

这样处理后,表单提交会保持POST方式,数据不会暴露在URL里,还能避免用户刷新页面重复提交表单的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:57:23