python cgi 编程

python默认自带了几个和web相关的模块。原来只知道SimpleHTTPServer 这个模块,后来又知道了 CGIHTTPServer 这个模块

  • SimpleHTTPServer
  • 1 python -m  SimpleHTTPServer 80 

    在命令行里键入上面的命令就有了一个简单的HTTP服务器了,服务器的端口是 80 (也可以是别的,如果80端口被占用了)

   -m 的意思就是 module,web的根目录是命令行的当前目录  (win7 下 在一个文件夹空白的地方 shift+鼠标右键  会出现在此处打开命令行,再输入上面的例子就可以把当前目录作为web的根目录)

    打开浏览器,输入 http://localhost:80 即可看到文件夹下的目录和文件。

  1.     在忘记带u盘时,可以简单的做一个文件共享。
  2. 多看系统的wifi传书应该也是这个原理。
  3. 还可以简单的测试一下网页是否正常
  4. 如果文件夹下有index.html 就会自动打开作为首页
  • CGIHTTPServer
  • 1 python -m CGIHTTPServer 80 

    命令的解释和上面差不多,这次启动的是CGI (Common Gateway Interface)服务器,CGI 程序可以用任何脚本语言或者是完全独立编程语言实现,只要这个语言可以在这个系统上运行。

用上面的命令启动的 CGI服务器,web的根目录还是命令行的当前目录。但是如果直接把cgi的脚本放在当前目录下面是不能执行的,必须新建一个文件夹叫做cgi-bin,把脚本都放在这个目录下才能执行

    通俗的来说就是通过web去调用一个本地的程序,然后再把结果输出到web,就是这样一个交互的过程。有关python的CGI编程可以参考这个网站:http://www.w3cschool.cc/python/python-cgi.html上面的代码有好多是不能直接运行的,需要修改

     下面给出一个例子:

   起源:亚马逊的商品的图片的大小、旋转都是url query里面的参数控制的  可以看这个网址http://aaugh.com/imageabuse.html

   现在我们要模拟下那个大小的参数

  

 1 #coding:utf-8
 2 import cv,cv2
 3 import cgi,cgitb
 4
 5 form = cgi.FieldStorage()
 6 size = form.getvalue(‘s‘)
 7
 8 print "Content-Type:image/jpeg\r\n",
 9 print    #必须有  header的格式
10
11 if size in [‘big‘,‘small‘]:
12     img = cv2.imread(‘cgi-bin/1.jpg‘)
13     if size == ‘big‘:
14         resized = cv2.resize(img,(img.shape[1]*2,img.shape[0]*2))
15     elif size == ‘small‘:
16         resized = cv2.resize(img,(img.shape[1]/2,img.shape[0]/2))
17     cv2.imwrite("cgi-bin/resized.jpg",resized)
18     f = open(‘cgi-bin/resized.jpg‘,‘rb‘)
19     print f.read(-1)
20     f.close()
21 else:
22     f = open(‘cgi-bin/1.jpg‘,‘rb‘)
23     print f.read(-1)
24     f.close()

    访问的url应该是这样的  http://localhost/cgi-bin/img.py?s=small    s是size的一个标志,有big和small两个参数,默认的我们返回原始大小的图像。代码中使用到了opencv来进行resize到两倍或者缩小一倍。当然实际应用中可能更加复杂。

    前面的一段代码是输出http的header,http的header 里面的换行都是\r\n header结束的标志就是有两个连续的\r\n 

总结:

  上面只是python内置的几个简单的webserver,功能肯定比Apache什么的少了不少,但是偶尔测试一下还是可以的,不用装那么大的软件。

如果要深入学习web的还是要找一些框架,像是 Django、Tornado等。

使用Python开发Web,最简单,原始和直接的办法是使用CGI标准,在1998年这种方式很流行。 现在从应用角度解释它是如何工作: 首先做一个Python脚本,输出HTML代码,然后保存成.cgi扩展名的文件,通过浏览器访问此文件。 就是这样。

尽管实现很简单,还是暴露了一些问题和不便的地方。 问你自己这几个问题:

  • 应用中有多处需要连接数据库会怎样呢? 每个独立的CGI脚本,不应该重复写数据库连接的代码。 比较实用的办法是写一个共享函数,可被多个代码调用。
  • 一个开发人员 确实 需要去关注如何输出Content-Type以及完成所有操作后去关闭数据 库么? 此类问题只会降低开发人员的工作效率,增加犯错误的几率。 那些初始化和释放 相关的工作应该交给一些通用的框架来完成。
  • 如果这样的代码被重用到一个复合的环境中会发生什么? 每个页面都分别对应独立的数据库和密码吗?
  • 如果一个Web设计师,完全没有Python开发经验,但是又需要重新设计页面的话,又将 发生什么呢? 一个字符写错了,可能导致整个应用崩溃。 理想的情况是,页面显示的逻辑与从数据库中读取书本记录分隔开,这样 Web设计师的重新设计不会影响到之前的业务逻辑。

以上正是Web框架致力于解决的问题。 Web框架为应用程序提供了一套程序框架, 这样你可以专注于编写清晰、易维护的代码,而无需从头做起。 简单来说,这就是Django所能做的。

                                                                                -------------------The Django Book 2.0--中文版

  

时间: 2024-10-23 07:55:44

python cgi 编程的相关文章

Python CGI编程(转自易百)

Python CGI编程 Python的CGI编程,公共网关接口或CGI,Web服务器和一个自定义的脚本之间交换信息是一组定义的标准. 什么是CGI ? 公共网关接口或CGI,Web服务器和一个自定义的脚本之间交换信息是是一组定义的标准.. CGI规范在由NCSA和NCSA定义的CGI保持如下: 公共网关接口或CGI,如HTTP服务器信息服务器的标准接口是外部网关方案. 当前版本CGI/1.1和CGI/1.2. 网页浏览 理解CGI的概念,让我们看看会发生什么,当我们点击一个超链接到浏览特定网页

Python CGI编程

cgi.FieldStorage() 访问作为web请求一部分发送给web服务器的数据,数据作为一个python字典. CGI是什么? 通用网关接口或CGI,是一组定义信息如何在Web服务器和自定义脚本之间交换的标准. CGI规范目前保持是由NCSA 和 NCSA 维护和定义如下. 通用网关接口或CGI,是外部网关方案,如HTTP服务器的信息服务器的接口标准. 目前的版本是CGI/1.1,而CGI/1.2目前正在定制中. 网页浏览 要了解CGI的概念,让我们看看当点击一个超链接,浏览某一个网页或

Python CGI编程和CGIHTTPServer

Python2.7 的CGIHTTPServer可以作为一个简单的HTTP服务器,能够调用cgi脚本 1 在任意目录下创建一个特殊的目录 cgi-bin ,用于存放自己写的脚本(.py或.cgi) 2 在 cgi-bin 所在目录 执行 python -m CGIHTTPServer ,启动服务器 3 在浏览器输入 IP:8000/cgi-bin/xxx.py   即可调用cgi-bin目录下的xxx.py脚本了(Linux可能要更改权限755) 示例1 hello.py #!/usr/bin/

Python CGI编程Ⅳ

使用POST方法传递数据 使用POST方法向服务器传递数据是更安全可靠的,像一些敏感信息如用户密码等需要使用POST传输数据. 以下同样是hello_get.py ,它也可以处理浏览器提交的POST表单数据: 以下为表单通过POST方法(method="post")向服务器脚本 hello_get.py 提交数据: 通过CGI程序传递checkbox数据 checkbox用于提交一个或者https://www.xuanhe.net/多个选项数据,HTML代码如下: 以下为 checkb

学习python cgi的一点心得体会

这两天学了python cgi编程,挺好玩的 跟大家分享一下: 目标: 创建一个cgi脚本 接收来访者的参数 步骤: 创建一个cgi服务的根目录(随便创建,然后在终端或者cmd下切换到该目录下) python2.x的httpserver启动:python -m CGIHTTPServer 13333   会启动http server 在13333端口上 python3.x的httpserver启动:python -m http.server --cgi 13333 这个--cgi不可以拿掉 否则

python web编程-CGI帮助web服务器处理客户端编程

这几篇博客均来自python核心编程 如果你有任何疑问,欢迎联系我或者仔细查看这本书的地20章 另外推荐下这本书,希望对学习python的同学有所帮助 概念预热 eb客户端通过url请求web服务器里的静态页面,但是要怎么做到洞察不同用户同的输入?比如说表单提交等来产生不同的返回结果呢 一个简单的思路是web服务器把这些请求提交给另外一个程序,它接受用户输入然后处理,根据输入生成一个静态的html文件交给web服务器 复杂上面这样的流程程序就是CGI,是单独出来的 创建HTML 的CGI 应用程

初试CGI编程--python篇

环境说明 system: Linux luogw-pc 3.5.0-48-generic #72~precise1-Ubuntu SMP Tue Mar 11 20:09:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux apache: (apt-get 安装方式) Server version: Apache/2.2.22 (Ubuntu) Server built:   Apr 17 2014 21:49:25 第一步:确认apache2服务器是否开启了C

吴裕雄--python编程:CGI编程

什么是CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户端HTML页面的接口. 网页浏览 为了更好的了解CGI是如何工作的,我们可以从在网页上点击一个链接或URL的流程: 1.使用你的浏览器访问URL并连接到HTTP web 服务器. 2.Web服务器接收到请求信息后会解析URL,并查找访问的文件在服务器上是否存在,如果存在返回文件的内容,否则返回错误信

Python网页编程(CGI)

1)程序简单,引用几个关键处理即可: #coding=utf-8 #!/usr/bin/python # CGI处理模块 from os import environ import cgi, cgitb # 创建 FieldStorage 的实例化 form = cgi.FieldStorage() # 获取数据 user_id ="a"; password="b"; first_name = form.getvalue('first_name') last_nam