Python的CGIHTTPServer交互实现详解
作者:tanghaiyu777 发布时间:2021-04-19 08:39:09
介绍
对于服务器后端开发者而言,有时候需要把自己的一些服务直接暴露给PM或者其他RD使用,这个时候需要搭建一套web服务可以和前端用户做简单交互,按照最常规的做法,一般是用Apache或者Nginx作为webserver后端使用cgi或者fcgi程序或者脚本进行处理,当然这种做法安全且正规。
但是我个人更喜欢一个更简单的做法:就是利用python自带的CGIHTTPServer作为服务器,然后通过一个简单的html页面进行交互,通过post请求直接调用总控脚本,与用户进行交互。
使用方法和示例
启动服务
Python的CGIHTTPServer一般是与python一起安装的,使用如下命令既可以启动,为了便于组织目录,建议先建立一个目录,比如web,然后再运行下面的命令。
nohup python -m CGIHTTPServer 8088 &
上面的命令使CGIHTTPServer在非中断后台运行,运行log可以通过当前目录下的nohup.out查看。
编写交互页面
在启动server的当前目录下,建立一个index.html文件,编写内容如下。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title> Python-CGIHTTPServer使用示例 </title>
<meta name="author" content="Haiyu">
<center><h1> Python-CGIHTTPServer使用示例 </h1></center>
</head>
<hr style="height:5px;border:none;border-top:5px ridge green;" />
<body>
<br/>
<center><h2>计算圆的周长</h2></center>
<center>
<p>请输入圆的半径长度.</p>
<br/>
<form action="cgi-bin/c_length.sh" method="post" enctype="text/plain" target="_blank">
radius:<input type="text" id="radius" name="radius" value=""/>
<input type="submit" id="c_length" name="c_length" value="计算周长">
</form>
</center>
<br/>
<br/>
<br/>
</body>
<hr style="height:5px;border:none;border-top:5px ridge green;" />
<br/>
<br/>
</html>
这个界面的功能非常简单,使用一个form表单接收用户的提交的半径参数,然后计算完周长之后进行返回,使用post请求。
CGI脚本
这个才是我们后端开发同学最关心的内容,这个脚本就是用来完成主要的逻辑操作进行返回,因为我们后端同学关注更多的不是交互界面的华丽而是逻辑处理的正确性和严谨性,根据我的经验,后端不管多么复杂的处理流程,最终都可以用一个脚本包起来,根据输入得到输出,这里面的输入就是我们用户提交的参数,输出就是我们经过层层处理之后需要返回的内容。
这个脚本建议放在server运行目录下新建立的cgi-bin目录中。
#!/bin/bash
mysql_bin=/home/work/mysql/bin/mysql
echo "Content-Type:text/html; Charset=gbk"
echo ""
echo "<br/>"
radius=0
c_length=0
if [[ "$REQUEST_METHOD" == "POST" ]];then
read vars
echo "$vars" | awk -F "=" '{print $2}' > temp
dos2unix temp
radius=`cat temp`
c_length=$(echo "scale=2;2*3.14*$radius" | bc)
echo "<br/>"
echo "<table border="5" cellpadding="10">"
echo "Userid Info:"
echo "<tr>"
echo "<td>半径</td><td>周长</td>"
echo "</tr>"
echo "<tr>"
echo "<td>"$radius"</td><td>"$c_length"</td>"
echo "</tr>"
echo "</table>"
fi
总结
来源:http://blog.csdn.net/tanghaiyu777/article/details/74315752


猜你喜欢
- 命令行进入python打开cmd——>直接输入python即可,如下退出python方法一:先按Ctrl+z,再按Enter(回车键)
- 今天遇到一个非常基础的问题,结果搞了好久好久.....赶快写一篇博客记录一下:本来两个不一样的字符串,在if 的条件判断中被判定为True,
- CREATE TABLE [dbo].[TbGuidTable]( [TableName] [varchar](50) NOT NULL,
- 一 ,mysql事务MYSQL中只有INNODB类型的数据表才能支持事务处理。启动事务有两种方法(1) 用begin,rollback,co
- 导言GridView是由一组字段(Field)组成的,它们都指定的了来自DataSource中的什么属性需要用到自己的输出呈现中。最简单的字
- 一、Pandoc转换1.1 问题由于我们markdown编辑器比较特殊,一般情况下,我们不太好看,如果转换成pdf的话,我们就不需要可以的去
- 本文实例讲述了Python素数检测的方法。分享给大家供大家参考。具体如下:因子检测:检测因子,时间复杂度O(n^(1/2))def is_p
- 自动化测试执行的用例有很多,python额测试用例文件,都是以“test”开头的。TestLoader(defaultTestLoader)
- 如下所示:import osDIR = "/home/serho/workspace/lisp"def compare(
- 1. 原先的配置 把 fckeditor/filemanager/connectors 目录删除; 有同学可能会问了,都删除了怎么上传文件?
- 有过Web经验的人喜欢使用:<meta http-equiv="refresh" content="1;
- 简介使用的核心模块是python标准库中的zipfile模块。这个模块可以实现zip文件的各种功能,具体可以查看官方参考文档。这里的暴力破解
- 在我上一篇文章,我搭了一个框架,模拟了Flask网站上“@app.route(‘/')”第一条例子的行为。如果你错过了那篇“这不是魔
- 我们都知道DBCC命令有点尴尬,因为你不能在T-SQL查询里调用它们,你也不能关联它们的输出到其它DMV/DMF。例如你想为每个用户会话返回
- 数据集介绍《悲惨世界》中的人物关系图,图中共77个节点、254条边。数据集截图:打开README文件:Les Misérables netw
- AES(英文:Advanced Encryption Standard,中文:高级加密标准),是一种区块加密标准。AES将原始数
- 介绍:pyenv-virtualenv是pyenv的一个插件,作用如同virtualenv一样,是用来管理虚拟环境的,配合pyenv主体使用
- Python是一门高级编程语言,其拥有多种循环方式,如for循环、while循环、do-while循环等。在编写程序时,需要根据不同的场景和
- python给数据加上高斯噪声一开始用MATLAB给数据加噪声很简单,就一句话:% 给数据加指定SNR的高斯噪声signal_noise =
- mysql在查询上千万级数据的时候,通过索引可以解决大部分查询优化问题。但是在处理上亿数据的时候,索引就不那么友好了。数据表(日志)是这样的