django操作静态页面后返回提示

📅 发布时间:2026/7/3 23:56:58 👁️ 浏览次数:
django操作静态页面后返回提示
展示Django返回一个带有按钮的静态HTML页面。触发用户点击按钮浏览器向后端发送请求。响应Django接收请求处理后返回提示信息。这里有两种实现方式一种是传统的页面刷新方式简单一种是现代的AJAX方式体验更好不刷新页面。方式一传统表单提交 (页面会刷新)这种方式最简单符合Django MTV模式的标准流程。点击按钮后页面会刷新并在顶部显示提示信息。1. 准备静态HTML文件在项目的templates文件夹下创建index.html。这里的关键是使用form标签包裹按钮点击按钮时会自动向Django发送POST请求。代码生成完成HTML代码2. 编写视图逻辑视图需要处理两种情况如果是GET请求就显示页面如果是POST请求用户点击了按钮就处理逻辑并返回提示。# views.py from django.shortcuts import render, redirect from django.contrib import messages # 引入Django内置的消息框架 # 展示页面的视图 def index_page(request): return render(request, index.html) # 处理按钮提交的视图 def submit_action(request): # 必须是POST请求才处理 if request.method POST: # 获取按钮提交的值判断用户点击了哪个按钮如果有多个 action request.POST.get(action) if action confirm: # 在这里编写你的业务逻辑如保存数据库 print(用户点击了确认按钮执行后台逻辑...) # 添加提示信息到消息框架 messages.success(request, 操作成功已收到您的提交请求。) # 处理完后重定向回展示页面 (PRG模式) return redirect(index_page)3. 配置URL路由# urls.py from django.urls import path from . import views urlpatterns [ path(, views.index_page, nameindex_page), path(submit/, views.submit_action, namesubmit_action), ]方式二AJAX异步提交 (页面不刷新)如果你希望点击按钮后页面不刷新直接弹窗提示需要结合JavaScriptjQuery为例和Django的JSON响应。1. HTML页面 (引入JS)代码生成完成HTML代码2. 视图返回JSON数据# views.py from django.http import JsonResponse from django.views.decorators.csrf import csrf_exempt # 仅演示生产环境请确保有CSRF保护 csrf_exempt # 测试用生产环境建议去掉并用常规CSRF处理 def index_page(request): return render(request, index.html) csrf_exempt def ajax_submit(request): if request.method POST: # 执行后台逻辑... return JsonResponse({status: ok, message: 后台处理成功这是您的提示}) return JsonResponse({status: error}, status400)总结建议如果你是初学者或者项目比较传统推荐使用方式一。它利用了Django内置的messages框架和重定向机制安全且符合Web标准。如果你追求用户体验希望像现代App一样无刷新操作请使用方式二。get请求方式后的提交在Django中处理传统表单的GET请求与 POST 请求非常相似但核心区别在于数据的获取方式和应用场景。GET 请求通常用于“获取/查询”数据如搜索框、筛选列表而POST 请求通常用于“提交/修改”数据。以下是处理 GET 请求表单的完整流程1. 前端HTML修改form标签关键点在于将method属性设置为get。提交后参数会拼接在 URL 后面例如http://127.0.0.1:8000/search/?qdjango 。代码生成完成HTML代码2. 后端视图使用request.GET在视图中不再使用request.POST而是使用request.GET来获取参数。request.GET是一个类似字典的对象。# views.py from django.shortcuts import render def search_view(request): # 初始化上下文用于存储结果 context {} # 1. 判断是否是 GET 请求 (通常通过检查参数是否存在来判断) # request.GET.get(key) 是获取值的常用方法如果key不存在返回None query_text request.GET.get(query) if query_text: # 2. 业务逻辑处理模拟在数据库中搜索 # 这里仅作演示实际会使用 MyModel.objects.filter(name__containsquery_text) print(f后端接收到了搜索关键词: {query_text}) processed_result f找到了关于 {query_text} 的 10 条记录 # 3. 将结果放入上下文准备渲染回页面 context[result] processed_result context[query] query_text # 回填到输入框保持用户体验 else: # 如果没有带参数初次进入页面可以什么都不做或显示默认内容 context[result] 请输入关键词进行搜索。 return render(request, search_form.html, context)3. URL配置配置与普通视图无异。# urls.py from django.urls import path from . import views urlpatterns [ path(search/, views.search_view, namesearch_view), ] 关键点详解1. 获取数据的方法推荐写法value request.GET.get(key)如果 URL 中没有该参数返回None不会报错。不推荐写法value request.GET[key]如果 URL 中没有该参数会抛出MultiValueDictKeyError异常导致页面崩溃500错误。2. 处理多选框 (CheckBox)GET 请求也常用于筛选。如果一个表单里有多个复选框如爱好选择name相同但value不同代码生成完成HTML代码后端获取时需要用getlisthobbies request.GET.getlist(hobby) # 结果是一个列表: [coding, reading]3. GET 请求不需要 CSRF Token这是一个重要的区别。POSTDjango 强制要求form里必须有{% csrf_token %}否则拒绝访问。GETDjango 默认不验证 GET 请求的 CSRF Token。因为 GET 被定义为“安全”的读取操作不应该改变服务器数据。 POST vs GET 处理对比特性GET 请求POST 请求HTML form methodmethodgetmethodpost后端获取数据request.GET.get(key)request.POST.get(key)数据位置URL 参数中 (?keyvalue)HTTP 请求体中安全性低URL可见不适合传密码高不可见CSRF 验证不需要必须加{% csrf_token %}典型场景搜索、筛选、排序登录、注册、修改数据总结处理 GET 表单的核心步骤HTML中form methodget。后端用request.GET.get(表单name属性)接收。处理数据后render回页面即可实现“打开页面 - 输入 - 提交 - 看到结果”的闭环。