文档章节

初探Python CGI:搭建CGI编程调试环境

SamYjy
 SamYjy
发布于 2018/12/02 13:56
字数 1420
阅读 66
收藏 1

“CGI(Common Gateway Interface,通用网关接口) 是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。”(百度百科)Python语言自带CGI处理模块,可以通过编写python CGI脚本实现网页前端与Python程序的交互。从网页前端获取的数据往往又可以通过connector-python实现与MySQL等数据库的交互,从而从整个项目的角度来说,该环境的搭建和运行是实现Python CGI全栈的整个过程的第一个较为重要的步骤。本文旨在论述Python CGI开发运行环境的两个配置方法。

CGI编程环境配置方法一:搭建本地微服务器,以xampp为例

第一步:下载安装服务器xampp

编写好的python CGI脚本需要在主机(服务器)的特定配置下才能正常运行。本例选择xampp server为例。xampp server是Apache server的一种,可用于搭建本地小微型服务器,下载地址为:https://www.apachefriends.org/index.html 。xampp相关的周边产品详见链接:https://bitnami.com/stack/xampp?utm_source=bitnami&utm_medium=installer&utm_campaign=XAMPP%2BInstaller

安装完毕后,单击Apache control panel中Apache 模块后的config按钮,选择httpd.conf。在打开的文本文档中按Ctrl + F搜索关键词“addhandler”,并在如图所示处加入python脚本的文件扩展名.py。

第二步:编写简易html脚本

xampp安装完毕之后,打开路径中的htdocs文件夹,在其中新建文件夹My_projects,并且编写一个仅含有一个文本框和一个按钮,且所用语言为英语的简易网站(charset为utf-8时,若不更改原始设置会导致xampp server报error 500错误,此处入门简介为了简便,便暂时不处理此问题)。该建议html脚本如下:

<html>
<title>Wish collecting website</title>
<body>
<form method=POST action="../cgi-bin/My_projects/chap01_01_Hellocgi.py">
<p>Input your wish: </br>
<p><input type=text name=thing>
<p><input type=submit value='Submit your wish!'>
</form>
</body>
</html>

该脚本路径为”xampp软件安装路径”本机XAMPP安装目录\htdocs\My_projects\Submit_wish.html”,运行效果如图:

第三步:编写CGI交互脚本

该脚本也比较简单,为读入提交上述html的表单中的数据并且以一定形式输出在浏览器中,脚本如下:

#!C:/Develop_Tools/Anaconda3/python
import cgi
form = cgi.FieldStorage()
print("Cotent-type: text/html\n")
print("Hope that your wish: \"", form['thing'].value, "\" comes true!")

其中,第1行为声明当前系统中Python解释器的路径,视系统不同需要作出相应修改。第四行html后的换行符(”\n”)不能省略且必须放置于正式内容之前。根据一般的cgi项目规范,被执行的CGI脚本应当被放置于cgi-bin文件夹中(虽然放在同一级目录中亦可,但是出于安全性等原因一般不会这么做)。脚本路径位为:”本机XAMPP安装目录\cgi-bin\My_projects\chap01_01_Hellocgi.py”。

第四步:调试运行脚本

至第三步为止,该交互程序就编写完毕了,最后打开Submit_wish.html这个网页文档,并运行本地的Apache server进行调试,如图所示:

注意:网页文件的路径”本机XAMPP安装目录\htdocs\My_projects\Submit_wish.html”在调试时应当变更为:” https://WEB_SERVER_URL/My_projects/Submit_wish.html” 。其中WEB_SERVER_URL为网页所在的IP地址,本机调试下值为localhost或127.0.0.1。 其中https视情况也可能为http。

CGI编程环境配置方法二:自建脚本作为CGI服务器

CGI编程的调试过程还可以通过自建python脚本作为CGI服务器实现,该脚本如下:

# -*- coding: utf-8 -*-
import os
from http.server import HTTPServer, CGIHTTPRequestHandler
webdir = "./"
port = 80
os.chdir(webdir)
srvraddr = ("localhost", port)
srvrobj = HTTPServer(srvraddr, CGIHTTPRequestHandler)
srvrobj.serve_forever()

然后,在该脚本所在路径新建一个文件夹,命名为cgi-bin,并且将方法一第三步的脚本放入这其中。

之后,把上述方法一第二步 html 脚本的第四行路径视情况作出相应的修改,如果在方法一中放入的就是cgi文件相关目录下,则不用修改: <form method=POST action="../cgi-bin/My_projects/chap01_01_Hellocgi.py">,如果在自建的cgi-bin文件夹下没有My_projects这个文件夹,而是直接将cgi脚本放入其中,则可以改成:<form method=POST action="../cgi-bin/chap01_01_HellocgiV2.py">。运行效果如下(假设调试运行环境即为本机):

建议:为了调试简便性以及路径管理方便性,建议将自建的服务器脚本、网页入口页面和cgi-bin文件夹放在同一个目录下,python cgi脚本直接放入cgi-bin文件夹中。

总结

本文简要讲述了Python CGI编程的搭建、调试和运行过程。这一过程是使用Python将前端数据通过CGI转化为Python程序能够进行处理的重要一步,因而理解这一过程有利于为进一步使用Python进行全栈开发打下了技术基础。顺祝各位有志全栈的同学们在全栈的道路上行进顺利。

参考资料:

  1. 百度百科,https://baike.baidu.com/item/CGI/607810?fromtitle=%EF%BC%A3%EF%BC%A7%EF%BC%A9&fromid=6717913&fr=aladdin
  2. xampp下配置python cgi环境的参考视频:https://www.youtube.com/watch?v=hv77IgkojfQ
  3. cgi允许python脚本运行相关配置:https://www.youtube.com/watch?v=T18tlQyQkrQ

© 著作权归作者所有

共有 人打赏支持
SamYjy

SamYjy

粉丝 61
博文 56
码字总数 103438
作品 0
其它
程序员
私信 提问
21个Python免豆资料下载地址汇总

为了方便大家学习,小弟最近整理了一批免豆下载的Python资料,共21个,整理了这批资料的下载地址,大家可以根据自己的需要选择性下载。希望大家喜欢~ Python灰帽子中文 http://down.51cto.co...

IT小白白
2012/07/30
0
0
XAMPP配置mod_python apache 测试正常通过!

httpd.conf 添加一下可以让py程序在cgi-bin目录下运行 AddHandler cgi-script .cgi .py 实际上我们添加了以上内容从新启动apache就可以利用apache编程了,用pyton来做我们的 --kai0200@gmai...

Yamazaki
2012/05/21
0
0
网页爬虫--requests--urllib2--cgi

-- --import------import requests 模块---python爬虫---------------------------------------------------------------------------- -- 用Pyhton自带的urllib或urllib2模块抓取网页或许有......

liapple6
2018/10/28
0
0
python cgi html

在Linux中用python -m CGIHTTPServer搭建一个微型的html服务时运行python格式的cgi脚本时出现了如下错误: File "/usr/lib64/python2.4/CGIHTTPServer.py",line 224,in run_cgi os.execve(s......

什中
2013/03/08
646
0
WSGI 初探

原文转自:http://blog.linluxiang.info/2011/03/03/wsgi-learn/ 前言 本文不涉及WSGI的具体协议的介绍,也不会有协议完整的实现,甚至描述中还会掺杂着本人自己对于WSGI的见解。所有的WSGI官...

红薯
2011/08/24
3K
4

没有更多内容

加载失败,请刷新页面

加载更多

工作流题目

1. 当 创建流程审批系统时,我们需要 具备 哪些 功能? 答:(1) 流程管理 (2) 流程发起 (3) 流程 审批 (4) 流程 查询

杨凯123
25分钟前
2
0
C++的重载操作符(operator)介绍

本文主要介绍C++中的重载操作符(operator)的相关知识。 1. 概述 1.1 what operator 是C++的一个关键字,它和运算符(如=)一起使用,表示一个运算符重载函数,在理解时可将operator和运算符...

天王盖地虎626
30分钟前
2
0
每个 JavaScript 工程师都应懂的33个概念

简介 这个项目是为了帮助开发者掌握 JavaScript 概念而创立的。它不是必备,但在未来学习(JavaScript)中,可以作为一篇指南。 本篇文章是参照 @leonardomso 创立,英文版项目地址在这里。 ...

前端小攻略
33分钟前
1
0
使用keepalived实现nginx的高可用

概述 是这样子的,我想让家中所有的应用服务都从nginx中出去,让nginx处于访问的最边缘地带,为了让nginx可靠性加强,所以nginx就得实现高可用,分别是下面两台机器要做nginx的集群 10.10.10...

bboysoulcn
今天
3
0
Mysql索引机制B+Tree

1、问题引入 有一个用户表,为了查询的效率,需要基于id去构建索引。构建索引我们需要考虑两个方面的问题,1个是查询的效率,1个是索引数据的存储问题。该表的记录需要支持百万、千万、甚至上...

万山红遍
今天
47
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部