上一篇:Django之--MVC的Model 演示了如何使用GET方法处理表单请求,本文讲述直接在当前页面返回结果,并使用更常用的POST方法处理。

Post方法与get方法的区别网上有很多这里不再详述,相对来说POST更加安全和用途多样,get多用于不包含敏感信息的查询。

一、首先我们修改下page.html

  1. <!DOCTYPE html>
  2. <html>
  3. <h3>{{ 标题 }}</h3>
  4. <body>
  5. <p>
  6. {% for 商品 in 商品列表 %}
  7. <li><font face="verdana" color="blue" size=4>{{ 商品 }}</font></li>
  8. {% endfor %}
  9. </p>
  10. <br>
  11. <form action="/product" method="post"> #修改为/product,方法修改为post,我们通过此url展示商品和查询结果
  12. {% csrf_token %} #添加1
  13. <input type="text" name="q">
  14. <input type="submit" value="查看商品信息">
  15. </form>
  16. <p>{{ 结果 }}</p> #添加2:这里预留一个结果显示行
  17. </body>
  18. </html>

{% csrf_token %}的标签:csrf 全称是 Cross Site Request Forgery。这是Django提供的防止伪装提交请求的功能。POST 方法提交的表格,必须有此标签。

二、然后我们编写product.py文件:

  1. from django.shortcuts import render
  2. from django.views.decorators import csrf
  3. from . import mysql
  4. def page(request):
  5. context={}
  6. context['标题'] ='商品种类:'
  7. pro_list=mysql.db_query("select distinct name from product")
  8. context['商品列表']=[]
  9. for i in range(0,len(pro_list)):
  10. context['商品列表'].append(pro_list[i][0])
  11. if request.POST:
  12. pro=request.POST['q']
  13. if not pro.strip():
  14. context['结果'] = '搜索项不能为空'
  15. else:
  16. price_quan=mysql.db_query("select price,quantity from product where name='%s'"%(pro))
  17. price=str(price_quan[0][0])
  18. quantity=str(price_quan[0][1])
  19. context['结果'] = '你搜索的商品为: ' + pro + '商品价格为:' + price + '商品余量为:' + quantity
  20. return render(request,'page.html',context)

然后这里再贴一下上一篇GET方法的写法作对比:

  1. # -*- coding: utf-8 -*-
  2. from django.http import HttpResponse
  3. from django.shortcuts import render
  4. # HttpResponse与render的区别在于,前者只用于返回文本信息,而render即其字面意思“渲染”,意思是使用context渲染html页面后返回。
  5. from . import mysql
  6. # 表单
  7. def page(request):
  8. context={}
  9. context['标题'] ='商品种类:'
  10. pro_list=mysql.db_query("select distinct name from product")
  11. context['商品列表']=[]
  12. for i in range(0,len(pro_list)):
  13. context['商品列表'].append(pro_list[i][0])
  14. return render(request,'page.html',context)
  15. # 接收请求数据
  16. def result(request):
  17. request.encoding='utf-8'
  18. pro=request.GET['q']
  19. if not pro.strip():
  20. message = '搜索项不能为空'
  21. else:
  22. price_quan=mysql.db_query("select price,quantity from product where name='%s'"%(pro))
  23. price=str(price_quan[0][0])
  24. quantity=str(price_quan[0][1])
  25. message = '你搜索的商品为: ' + pro + '商品价格为:' + price + '商品余量为:' + quantity
  26. return HttpResponse(message)

三、最后修改下urls.py

  1. from django.conf.urls import url
  2. from . import view,testdb,search,product
  3.  
  4. urlpatterns = [
  5. url(r'^hello$', view.hello),
  6. url(r'^product$', product.page),
  7. ]

最后的展示结果如下:

Django之--POST方法处理表单请求的更多相关文章

  1. 当有多个form表单请求时如何处理?

    问题:当有多个表单请求时如何处理?两种获取form表单 name属性值来区分是哪一个form表单.问题:如何获取name的值呢?<form name="myForm" met ...

  2. Laravel 表单验证创建“表单请求”实现自定义请求类

    按照文档创建表单请求自定义类以后,调用总是403页面,咨询大佬说: public function authorize() { // 在表单验证类的这个方法这里要返回true,默认返回false,这个 ...

  3. jquery 通过submit()方法 提交表单示例

    jquery 通过submit()方法 提交表单示例: 本示例:以用户注册作为例子.使用jquery中的submit()方法实现表单提交. 注:本示例仅提供了对表单的验证,本例只用选用了三个字段作为测 ...

  4. java如何区分是form表单请求,还是ajax请求

    requestType = request.getHeader("X-Requested-With");                 if(requestType==null) ...

  5. MVC中使用内建的HTML辅助方法产生表单元素提交表单与button按钮事件的陷阱

    网站模板页有个登陆的退出按钮,当点击时跳转到登陆页面. <button onclick="logout()" >退出</button> $("#l ...

  6. jQuery form插件的使用--使用 fieldValue 方法校验表单

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  7. Django报错:提交表单报错---RuntimeError: You called this URL via POST, but the URL doesn’t end in a slash and you have APPEND_SLASH set.

    Django报错:提交表单报错---RuntimeError: You called this URL via POST, but the URL doesn’t end in a slash and ...

  8. Laravel 更新数据时在表单请求验证中排除自己,检查指定字段唯一性

    原文地址:https://moell.cn/article/24 不错的laravel网站 需求场景 修改用户信息时,在表单请求验证中排除当前邮箱所在的记录行,并检查邮箱的唯一性. Laravel版本 ...

  9. 通过C#的HttpClient模拟form表单请求

    post提交表单一般无非是一般text文本和文件类型,如下 <input type="file"/> <input type="text"/& ...

随机推荐

  1. SaltStack安装配置详解

    一.简介 Saltstack 比 Puppet 出来晚几年,是基于Python 开发的,也是基于 C/S 架构,服务端 master 和客户端 minions :Saltstack 和 Puppet ...

  2. ES6躬行记(2)——扩展运算符和剩余参数

    扩展运算符(Spread Operator)和剩余参数(Rest Parameter)的写法相同,都是在变量或字面量之前加三个点(...),并且只能用于包含Symbol.iterator属性的可迭代对 ...

  3. Session提要

    Session即会话,批一种持续性的.双向的链接.Sesstion和Cookie本质上没有什么区别,都是针对HTTP协议的局限性而提出的一种保持客户端和服务器间保持会话连接状态的机制.       S ...

  4. python字符串类型

    python中的字符串 python中的字符串类型为str,也是平时操作的类型.但除了str类型,还有一个专门的名为"string"的模块(导入即可知),是很早以前没有str类型的 ...

  5. 解读经典《C#高级编程》第七版 Page45-50.核心C#.Chapter2

    前言 本篇讲述枚举和名称空间. 01 枚举 首先需要明确枚举的概念:枚举是用户定义的整数类型.使用枚举的目标是,使用一组容易记忆的名称,来使得代码更容易编写和维护. 我们对比枚举的定义和类的定义,会发 ...

  6. 利用反射跟自定义注解拼接实体对象的查询SQL

    前言 项目中虽然有ORM映射框架来帮我们拼写SQL,简化开发过程,降低开发难度.但难免会出现需要自己拼写SQL的情况,这里分享一个利用反射跟自定义注解拼接实体对象的查询SQL的方法. 代码 自定义注解 ...

  7. Maven(六)Eclipse使用Maven插件创建项目

    1. 创建Maven版Java工程 1.1 具体步骤 1.2 更改默认JDK版本 默认JDK版本过低 可以通过配置setting.xml来更改JDK版本 加入如下代码 <profile> ...

  8. Yii2基本概念之——事件(Event)

    说起事件(event),我们可是一点都不陌生.现实生活当中的事件无处不在,比如你发了一条微博,触发了一条事件,导致关注你的人收到了一条消息,看到你发的内容:比如你通过支付宝买东西,付了款,触发一个事件 ...

  9. 汇编语言--微机CPU的指令系统(五)(算术运算指令)

    (3)算术运算指令 算术运算指令是反映CPU计算能力的一组指令,也是编程时经常使用的一组指令.它包括:加.减.乘.除及其相关的辅助指令. 该组指令的操作数可以是8位.16位和32位(80386+).当 ...

  10. mapper代理方式开发

    使用mapper代理方式开发: 需要编写mapper接口,UserMapper.java需要编写映射文件,UserMapper.xml需要遵循一些开发规范,mybatis便可以自动生成mapper接口 ...