当前位置: 首页 > news >正文

从0开始学python -47

Python CGI编程 -2

GET和POST方法

浏览器客户端通过两种方法向服务器传递信息,这两种方法就是 GET 方法和 POST 方法。

使用GET方法传输数据

GET方法发送编码后的用户信息到服务端,数据信息包含在请求页面的URL上,以"?"号分割, 如下所示:

http://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2

有关 GET 请求的其他一些注释:* GET 请求可被缓存

  • GET 请求保留在浏览器历史记录中
  • GET 请求可被收藏为书签
  • GET 请求不应在处理敏感数据时使用
  • GET 请求有长度限制
  • GET 请求只应当用于取回数据

简单的url实例:GET方法

以下是一个简单的URL,使用GET方法向hello_get.py程序发送两个参数:

/cgi-bin/test.py?name=菜鸟教程&url=http://www.runoob.com

以下为 hello_get.py 文件的代码:

#!/usr/bin/python3# CGI处理模块
import cgi, cgitb# 创建 FieldStorage 的实例化
form = cgi.FieldStorage()# 获取数据
site_name = form.getvalue('name')
site_url  = form.getvalue('url')print ("Content-type:text/html")
print ()
print ("<html>")
print ("<head>")
print ("<meta charset=\"utf-8\">")
print ("<title>菜鸟教程 CGI 测试实例</title>")
print ("</head>")
print ("<body>")
print ("<h2>%s官网:%s</h2>" % (site_name, site_url))
print ("</body>")
print ("</html>")

文件保存后修改 hello_get.py,修改文件权限为 755:

chmod 755 hello_get.py

浏览器请求输出结果:

简单的表单实例:GET方法

以下是一个通过HTML的表单使用GET方法向服务器发送两个数据,提交的服务器脚本同样是hello_get.py文件,hello_get.html 代码如下:

# 实例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<form action="/cgi-bin/hello_get.py" method="get">
站点名称: <input type="text" name="name">  <br />站点 URL: <input type="text" name="url" />
<input type="submit" value="提交" />
</form>
</body>
</html>

默认情况下 cgi-bin 目录只能存放脚本文件,我们将 hello_get.html 存储在 test 目录下,修改文件权限为 755:

chmod 755 hello_get.html

Gif 演示如下所示:

使用POST方法传递数据

使用POST方法向服务器传递数据是更安全可靠的,像一些敏感信息如用户密码等需要使用POST传输数据。

以下同样是hello_get.py ,它也可以处理浏览器提交的POST表单数据:

#!/usr/bin/python3# CGI处理模块
import cgi, cgitb# 创建 FieldStorage 的实例化
form = cgi.FieldStorage()# 获取数据
site_name = form.getvalue('name')
site_url  = form.getvalue('url')print ("Content-type:text/html")
print ()
print ("<html>")
print ("<head>")
print ("<meta charset=\"utf-8\">")
print ("<title>菜鸟教程 CGI 测试实例</title>")
print ("</head>")
print ("<body>")
print ("<h2>%s官网:%s</h2>" % (site_name, site_url))
print ("</body>")
print ("</html>")

以下为表单通过POST方法( method=“post” )向服务器脚本 hello_get.py 提交数据:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<form action="/cgi-bin/hello_get.py" method="post">
站点名称: <input type="text" name="name">  <br />站点 URL: <input type="text" name="url" />
<input type="submit" value="提交" />
</form>
</body>
</html>
</form>

Gif 演示如下所示:

通过CGI程序传递checkbox数据

checkbox用于提交一个或者多个选项数据,HTML代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<form action="/cgi-bin/checkbox.py" method="POST" target="_blank">
<input type="checkbox" name="runoob" value="on" /> 菜鸟教程
<input type="checkbox" name="google" value="on" /> Google
<input type="submit" value="选择站点" />
</form>
</body>
</html>

以下为 checkbox.py 文件的代码:

#!/usr/bin/python3# 引入 CGI 处理模块
import cgi, cgitb# 创建 FieldStorage的实例
form = cgi.FieldStorage()# 接收字段数据
if form.getvalue('google'):google_flag = "是"
else:google_flag = "否"if form.getvalue('runoob'):runoob_flag = "是"
else:runoob_flag = "否"print ("Content-type:text/html")
print ()
print ("<html>")
print ("<head>")
print ("<meta charset=\"utf-8\">")
print ("<title>菜鸟教程 CGI 测试实例</title>")
print ("</head>")
print ("<body>")
print ("<h2> 菜鸟教程是否选择了 : %s</h2>" % runoob_flag)
print ("<h2> Google 是否选择了 : %s</h2>" % google_flag)
print ("</body>")
print ("</html>")

修改 checkbox.py 权限:

chmod 755 checkbox.py

浏览器访问 Gif 演示图:

通过CGI程序传递Radio数据

Radio 只向服务器传递一个数据,HTML代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<form action="/cgi-bin/radiobutton.py" method="post" target="_blank">
<input type="radio" name="site" value="runoob" /> 菜鸟教程
<input type="radio" name="site" value="google" /> Google
<input type="submit" value="提交" />
</form>
</body>
</html>

radiobutton.py 脚本代码如下:

#!/usr/bin/python3# 引入 CGI 处理模块
import cgi, cgitb# 创建 FieldStorage的实例
form = cgi.FieldStorage()# 接收字段数据
if form.getvalue('site'):site = form.getvalue('site')
else:site = "提交数据为空"print ("Content-type:text/html")
print ()
print ("<html>")
print ("<head>")
print ("<meta charset=\"utf-8\">")
print ("<title>菜鸟教程 CGI 测试实例</title>")
print ("</head>")
print ("<body>")
print ("<h2> 选中的网站是 %s</h2>" % site)
print ("</body>")
print ("</html>")

修改 radiobutton.py 权限:

chmod 755 radiobutton.py

浏览器访问 Gif 演示图:

通过CGI程序传递 Textarea 数据

Textarea 向服务器传递多行数据,HTML 代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<form action="/cgi-bin/textarea.py" method="post" target="_blank">
<textarea name="textcontent" cols="40" rows="4">
在这里输入内容...
</textarea>
<input type="submit" value="提交" />
</form>
</body>
</html>

textarea.py 脚本代码如下:

#!/usr/bin/python3# 引入 CGI 处理模块
import cgi, cgitb# 创建 FieldStorage的实例
form = cgi.FieldStorage()# 接收字段数据
if form.getvalue('textcontent'):text_content = form.getvalue('textcontent')
else:text_content = "没有内容"print ("Content-type:text/html")
print ()
print ("<html>")
print ("<head>")
print ("<meta charset=\"utf-8\">")
print ("<title>菜鸟教程 CGI 测试实例</title>")
print ("</head>")
print ("<body>")
print ("<h2> 输入的内容是:%s</h2>" % text_content)
print ("</body>")
print ("</html>")

修改 textarea.py 权限:

chmod 755 textarea.py

浏览器访问 Gif 演示图:

通过CGI程序传递下拉数据。

HTML 下拉框代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<form action="/cgi-bin/dropdown.py" method="post" target="_blank">
<select name="dropdown">
<option value="runoob" selected>菜鸟教程</option>
<option value="google">Google</option>
</select>
<input type="submit" value="提交"/>
</form>
</body>
</html>

dropdown.py 脚本代码如下所示:

#!/usr/bin/python3# 引入 CGI 处理模块
import cgi, cgitb# 创建 FieldStorage的实例
form = cgi.FieldStorage()# 接收字段数据
if form.getvalue('dropdown'):dropdown_value = form.getvalue('dropdown')
else:dropdown_value = "没有内容"print ("Content-type:text/html")
print ()
print ("<html>")
print ("<head>")
print ("<meta charset=\"utf-8\">")
print ("<title>菜鸟教程 CGI 测试实例</title>")
print ("</head>")
print ("<body>")
print ("<h2> 选中的选项是:%s</h2>" % dropdown_value)
print ("</body>")
print ("</html>")

修改 dropdown.py 权限:

chmod 755 dropdown.py

浏览器访问 Gif 演示图:


相关文章:

从0开始学python -47

Python CGI编程 -2 GET和POST方法 浏览器客户端通过两种方法向服务器传递信息&#xff0c;这两种方法就是 GET 方法和 POST 方法。 使用GET方法传输数据 GET方法发送编码后的用户信息到服务端&#xff0c;数据信息包含在请求页面的URL上&#xff0c;以"?"号分割…...

【数据结构】八大经典排序总结

文章目录一、排序的概念及其运用1.排序的概念2.常见排序的分类3.排序的运用二、常见排序算法的实现1.直接插入排序1.1排序思想1.2代码实现1.3复杂度及稳定性1.4特性总结2.希尔排序2.1排序思想2.3复杂度及稳定性2.4特性总结3.直接选择排序3.1排序思想3.2代码实现3.3复杂度及稳定…...

BI的能力边界:能解决的企业问题和不擅长的领域

数字化转型本就需要借助信息化相关技术、思想来完成&#xff0c;所以说信息化建设同样是数字化转型过程中非常重要的一环&#xff0c;而这就是商业智能BI和数字化转型的关系 BI 能解决的企业问题 数据是企业的重要资产&#xff0c;也是企业商业智能BI的核心要求。通常&#x…...

金三银四面试必备,“全新”突击真题宝典,阿里腾讯字节都稳了

前言招聘旺季就到了&#xff0c;不知道大家是否准备好了&#xff0c;面对金三银四的招聘旺季&#xff0c;如果没有精心准备那笔者认为那是对自己不负责任&#xff1b;就我们Java程序员来说&#xff0c;多数的公司总体上面试都是以自我介绍项目介绍项目细节/难点提问基础知识点考…...

MYSQL 基础篇 | 02-MYSQL基础应用

文章目录1 MySQL概述2 SQL2.1 SQL通用语法2.2 SQL分类2.3 DDL2.3.1 数据库操作2.3.2 表操作2.4 DML2.4.1 添加数据2.4.2 修改数据2.4.3 删除数据2.5 DQL2.5.1 基础查询2.5.2 条件查询2.5.3 聚合查询2.5.4 分组查询2.5.5 排序查询2.5.6 分页查询2.5.7 综合练习2.6 DCL2.6.1 管理…...

CSS实现checkbox选中动画

前言 &#x1f44f;CSS实现checkbox选中动画&#xff0c;速速来Get吧~ &#x1f947;文末分享源代码。记得点赞关注收藏&#xff01; 1.实现效果 2.实现步骤 定义css变量&#xff0c;–checked&#xff0c;表示激活选中色值 :root {--checked: orange; }创建父容器&#xf…...

工业机器人编程调试怎么学

很多人觉得工业机器人很难学学&#xff0c;实际上机器人涉及的知识远比PLC要少。现简单说明一下初学者学习工业机器人编程调试的流程&#xff0c;以AUBO机器人为例&#xff1a; 首先我们需要知道工业机器人的调试学起来不难&#xff0c;远比编程更简单&#xff0c;示教器上的编…...

Java并发包提供了哪些并发工具类?

第19讲 | Java并发包提供了哪些并发工具类&#xff1f; 通过前面的学习&#xff0c;我们一起回顾了线程、锁等各种并发编程的基本元素&#xff0c;也逐步涉及了 Java 并发包中的部分内容&#xff0c;相信经过前面的热身&#xff0c;我们能够更快地理解 Java 并发包。 今天我要…...

systemctl 启动/停止/重新加载 nginx

systemctl 启动/停止/重新加载 nginx 一、新建nginx.service脚本 sudo vim /usr/lib/systemd/system/nginx.service然后按iii进入编辑模式&#xff0c;粘贴如下内容&#xff0c;其中/usr/local/nginx/是进行make && make install之后的文件夹路径&#xff0c;需要根据…...

SSRF学习 3

目录 <1> 什么是SSRF&#xff1f; <2> 通常SSRF会发生在哪些位置&#xff1f; <3> 测试流程 <4> Weblogic-ssrf 复现 (1) 漏洞存在点 (2) 注入HTTP头&#xff0c;利用Redis反弹shell (3) 修复方案 <1> 什么是SSRF&#xff1f; SSRF(Serv…...

Mysql(数据库基础篇)

&#x1f44c; 棒棒有言&#xff1a;也许我一直照着别人的方向飞&#xff0c;可是这次&#xff0c;我想要用我的方式飞翔一次&#xff01;人生&#xff0c;既要淡&#xff0c;又要有味。凡事不必太在意&#xff0c;一切随缘&#xff0c;缘深多聚聚&#xff0c;缘浅随它去。凡事…...

一种全新的图像变换理论的实验(五)——研究目的替代DCT和小波

一、前言 目前在大量的灰度图像测试下&#xff0c;基本确定变换系数ratio取值0-25之间时&#xff0c;逆变化后的图还能基本保障效果&#xff0c;而且越接近0效果越好。本文还是以lenna.bmp灰度图为例&#xff0c;实验不再逆变换&#xff0c;而是把变换后的数据直接输出为bmp的…...

vue3、vite、pinia 快速入门

准备 开发工具及插件IDE:vscode,WebStorm插件&#xff1a;Auto Close Tag、Auto Rename Tag、Live Server通过“&#xff01;”快速生成html模板正式学习安装vue通过CDN的方式导入vue<script src"" target"_blank">https://unpkg.com/vue3/dist/vue.…...

第六章 effect.scheduler功能实现

effect.scheduler功能实现 主要先了解scheduler需要实现什么样的需求&#xff0c;有一下四点&#xff1a; 1 通过 effect 的第二个参数给定一个 scheduler 的 fn 2 effect 第一次执行的时候 还会执行 fn 3 当 响应式对象 set update 不执行fn 而是执行 scheduler 4 如果说…...

软件测试之zentao

禅道 1. 禅道介绍 1.1 禅道项目管理软件是做什么的&#xff1f; 禅道&#xff0c;国产开源项目管理软件。它集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体&#xff0c;是一款专业的研发项目管理软件&#xff0c;完整覆盖了研发项目管理的核心流程。禅…...

美颜sdk动态贴纸的实现流程

随着移动互联网时代的到来&#xff0c;各式各样的 APP层出不穷&#xff0c;从最初的微信、 QQ到如今的抖音、快手等等&#xff0c;再到如今的微博、小红书等等&#xff0c;各式各样的 APP不断涌现。从最开始简单的图片展示到视频聊天&#xff0c;再到现如今丰富多样的各种动态贴…...

Web连接器

分模块编写爬虫&#xff08;一&#xff09; 连接器模块基本思路&#xff1a; 输入&#xff1a;url连接输出&#xff1a;url对应的html文本步骤&#xff1a; 定义url和user-agent获取网页的requests对象捕获异常&#xff1a; 403&#xff1a;禁止访问404&#xff1a;页面失效5…...

插上数据的翅膀,开启我升职加薪的梦想之旅

我是麦思思&#xff0c;大学毕业后就进入大厂工作并担任电子消费行业业务部门的数据分析师&#xff0c;对于一个数据分析师而言&#xff0c;Excel是必备技能&#xff0c;函数公式我能随手就来&#xff0c;几十M的文件处理那都是轻轻松松。但是&#xff0c;近几年随着企业业务发…...

来香港饮茶吹水先,免费报名Zabbix Meetup香港站!

Zabbix Meetup 来到香港啦&#xff01; 春暖花开&#xff0c;Zabbix计划5月来到香港&#xff0c;和你一起饮茶吹水&#xff01; 时间&#xff1a;5月某日&#xff0c;周几方便&#xff1f; 预计14:00-17:00 形式&#xff1a;线下交流会&#xff0c;免费&#xff0c;线下&…...

李群李代数求导-常用求导公式

参考 A micro Lie theory for state estimation in robotics manif issues 116 常用求导公式 Operation左雅克比右雅克比X−1\mathcal{X}^{-1}X−1JXX−1−I\mathbf{J}_{\mathcal{X}}^{\mathcal{X}^{-1}}\mathbf{-I}JXX−1​−IJXX−1−AdX\mathbf{J}_{\mathcal{X}}^{\mathc…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...