pythonweb编辑软件_python练习五—简单web应用

配置apache

我以前web开发基本都是基于java平台的,比如tomcat,servlet等等,由tomcat接收http请求,然后交给servlet处理,servlet处理完成以后把返回结果交给tomcat,由tomcat返回给客户端,这次学习python CGI的时候首先想到的是CGI的圆形原理是什么,怎么处理一次完整的http请求?过程如下:

客户端发起http请求

apache接收http请求

apache(必须加载了对应的处理模块,如处理python的mod_cgid.so)交给编写好的python脚本处理

python脚本接受参数并输出一个http页面

apache将这些输出返回给客户端

和我们熟悉的servlet处理相比是相当类似的,但是还有两个问题没有解决:

tomcat和apache的区别是什么?

apache怎么知道把请求交给python处理(即apache的配置)

tomcat和apache的区别

在此不进行复杂的比较,在此列中我只需要知道:

apache是一个高效的http静态服务器,用来处理静态页面的请求(如果需要处理动态请求需要加载对应模块,比如php,perl)

tomcat是一个java应用服务器,可以处理静态请求,也可以处理servlet

配置apache可以处理pyton脚本

首先安装apache2自不必说,目前大多数linux发行版应该自带了apache2

配置apache2.conf(有些可能是httpd.conf,可以使用locate定位该文件的位置),修改如下

# apache2.conf配置

# 加载处理python cgi的模块,必须有

LoadModule cgid_module/usr/lib/apache2/modules/mod_cgid.so

# 一定要注意配置的服务器根目录是是什么,我的是/var/www

# 告诉apache2访问/cgi-bin/的时候去 /var/www/cgi-bin/找脚本,注意要有'/'ScriptAlias/cgi-bin/ /var/www/cgi-bin/# 对python脚本所在目录进行配置AllowOverride None

Options+ExecCGI -MultiViews +SymLinksIfOwnerMatch

Order allow,deny

Allow from all

AddHandler cgi-script cgi# 识别cgi脚本后缀

AddHandler cgi-script .cgi .py

测试配置

好的姿势都摆好了,可以写一个示例试试配置是否成功。

编写一个python脚本

在/var/www/cgi-bin/目录下新建一个test.py

#!/usr/bin/env python#-*- coding=utf-8 -*-

importcgiimportcgitb;

cgitb.enable()print "Content-type:text/html"

print #注意此处必须加print打印出一个空行,否则CGI无法解析

print """

CGI Environment

修改脚本权限

# 特别注意我使用root用户直接登陆的,此处为了简单起见使用了777,在实际配置重中这是非常不安全的chmod 777 test.py

启动apache 服务

# 有些可能是httpd

service apache2 start

在浏览器中查看页面

在浏览器中输入:localhost/cgi-bin/test.py

看到下面内容(只要有内容就行,具体内容不一定一样)说明配置成功了

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

Shell Environment:

CONTEXT_DOCUMENT_ROOT/var/www/cgi-bin/CONTEXT_PREFIX/cgi-bin/DOCUMENT_ROOT/var/www/html

....(此处为省略的内容)

::1SERVER_ADMIN

webmaster@localhost

SERVER_NAME

localhost

SERVER_PORT80SERVER_PROTOCOL

HTTP/1.1SERVER_SIGNATURE

Apache/2.4.10 (Debian) Server at localhost Port 80
SERVER_SOFTWARE

Apache/2.4.10 (Debian)

View Code

在线编辑器

以上是python web学习之前的一些环境搭建工作,以下是一个简单的pyhton CGI程序,完成一个在线编辑器的功能,可以打开文件,编辑文件,保存文件(需要输入密码)。

整个功能比较简单,不再对详细过程解释,代码如下:

首页

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

editor

file name

View Code

编辑页面

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

#!/usr/bin/env python

#-*- coding=utf-8 -*-

import cgi

import sys

from os.path import join, abspath

# 先 输出头信息,便于后面的信息能正常输出

print """Content-type: text/html"""

# 文件所在目录

BASE_DIR = abspath('data')

form = cgi.FieldStorage()

filename = form.getvalue('filename')

if not filename:

print 'please input a filename'

sys.exit()

text = open(join(BASE_DIR, filename)).read()

print """

editing

File: %s

Password :

Text:

%s

""" % (filename, filename, text)

View Code

保存页面

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

#!/usr/bin/env python#-*- coding=utf-8 -*-

importcgiimportsysfrom os.path importjoin, abspath#先输出头信息,便于后面的输出正常

print "Content-type: text/html\n"

#文件所在目录

BASE_DIR = abspath('data')

form=cgi.FieldStorage()

text= form.getvalue('text')

filename= form.getvalue('filename')

password= form.getvalue('password')#检查参数是否为空

if not (text and filename andpassword):print 'invalid params'sys.exit()#验正密码

if password != '123':print 'invalid params'sys.exit()

f= open(join(BASE_DIR, filename), 'w')

f.write(text)

f.close()print 'the file have been saved'

View Code

注意:

在/var/www/cgi-bin/data下面新建文件edit2.dat,该文件一定是可读可写的

将以上三个页面复制到cgi-bin目录下,脚本记得修改权限,当前用户必须是可读可执行的

编写pyhton脚本的时候,返回的html包含header信息的时候,header前面不能有空行,header和正文之间必须有空行

代码位置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值