python练习五—简单web应用

配置apache

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

  1. 客户端发起http请求
  2. apache接收http请求
  3. apache(必须加载了对应的处理模块,如处理python的mod_cgid.so)交给编写好的python脚本处理
  4. python脚本接受参数并输出一个http页面
  5. apache将这些输出返回给客户端

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

  • tomcat和apache的区别是什么?
  • apache怎么知道把请求交给python处理(即apache的配置)

tomcat和apache的区别

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

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

配置apache可以处理pyton脚本

  1. 首先安装apache2自不必说,目前大多数linux发行版应该自带了apache2
  2. 配置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脚本所在目录进行配置
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
    AddHandler cgi-script cgi
</Directory>
# 识别cgi脚本后缀
AddHandler cgi-script .cgi .py

测试配置

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

编写一个python脚本

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

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

import cgi
import cgitb;
cgitb.enable()

print "Content-type:text/html"
print    # 注意此处必须加print打印出一个空行,否则CGI无法解析
print """<HTML>
<HEAD>
<TITLE>CGI Environment</TITLE>
</HEAD>
<BODY>"""
cgi.print_environ()
print "</BODY></HTML>"

修改脚本权限

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

启动apache 服务

# 有些可能是httpd
service apache2 start

在浏览器中查看页面

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

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

Shell Environment:

CONTEXT_DOCUMENT_ROOT
    /var/www/cgi-bin/
CONTEXT_PREFIX
    /cgi-bin/
DOCUMENT_ROOT
    /var/www/html
....(此处为省略的内容)
    ::1
SERVER_ADMIN
    [email protected]
SERVER_NAME
    localhost
SERVER_PORT
    80
SERVER_PROTOCOL
    HTTP/1.1
SERVER_SIGNATURE
    <address>Apache/2.4.10 (Debian) Server at localhost Port 80</address>
SERVER_SOFTWARE
    Apache/2.4.10 (Debian) 


在线编辑器

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

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

首页

<html>
  <head>
    <title>editor</title>
  </head>
  <body>
    <form action=‘edit2.py‘ method=‘POST‘>
      <b>file name</b>
      <input type=‘text‘ name=‘filename‘ />
      <input type=‘submit‘ value=‘open‘ />
  </body>
</html>

编辑页面

#!/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 """
<html>
  <head>
    <title>editing</title>
  </head>
  <body>
    <form action=‘save.py‘ method=‘POST‘>
      <b>File: %s</b> </br>
      <input type=‘hidden‘ value=‘%s‘ name=‘filename‘ />
      <b> Password :</b><br />
      <input type=‘password‘ name=‘password‘ /><br />
      <b>Text: </b> <br />
      <textarea column=‘20‘ row=‘10‘ name=‘text‘>%s</textarea> </br>
      <input type=‘submit‘ value=‘save‘ />
    </form>
  </body>
</html>
""" %  (filename, filename, text)

保存页面

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

import cgi
import sys
from os.path import join, 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 and password):
    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‘

注意:

  1. 在/var/www/cgi-bin/data下面新建文件edit2.dat,该文件一定是可读可写的
  2. 将以上三个页面复制到cgi-bin目录下,脚本记得修改权限,当前用户必须是可读可执行的
  3. 编写pyhton脚本的时候,返回的html包含header信息的时候,header前面不能有空行,header和正文之间必须有空行


代码位置

http://pan.baidu.com/s/1bo5z4pL

时间: 2024-10-20 04:10:54

python练习五—简单web应用的相关文章

python的超简单WEB服务器

转自: http://blog.licess.com/simplehttpserver/ http://www.lpfrx.com/archives/133/ shell中执行: python -m SimpleHTTPServer 或者在脚本中加入: import SimpleHTTPServer SimpleHTTPServer.test()  

Python 实现简单 Web 服务器

Python 实现简单 Web 服务器 最近有个需求,就是要创建一个简到要多简单就有多简单的web服务器,目的就是需要一个后台进程用来接收请求然后处理并返回结果,因此就想到了使用python来实现. 首先创建一个myapp.py文件,其中定义了一个方法,所有的请求都会经过此方法,可以在此方法里处理传递的url和参数,并返回结果. def myapp(environ, start_response): status = '200 OK' headers = [('Content-type', 't

Python+Flask+MysqL的web建设技术过程

前言 本人在一学期时间实现了Python+Flask+MysqL的web建设,页面具有简单的登录注册发布文章搜索文章等功能. 这篇文章总结了我最近一段时间的学习成果:使用Flask框架搭建一个web service,并在其中加上一些简单的css,js,html等.在本文中以实际的用户模块为例.之所以写这篇文章是因为想要总结自己一学期的学习成果并且与大家分享.由于是新手如有错漏请见谅. 一.使用工具 python3.5 实现此页面所有的static文件.templates文件与py文件 二.完成基

Python面试重点(web篇)

Python面试重点(web篇) 注意:只有必答题部分计算分值,补充题不计算分值. 第一部分 必答题 注意:除第四题4分以外,其他题均每题3分. 写出常用的bootstrap的样式. Bootstrap表格样式.栅格系统.带边框的表格.状态类表格(带背景色的表格).内联表单.禁用状态和只读状态 什么是响应式布局? 请通过jQuery发送ajax请求. $.ajax({ url:'/test/', # 提交的地址 type:"post", # 请求方式 data:{ # 提交的数据 na

CSS3与页面布局学习总结(五)——Web Font与Sprite

CSS3与页面布局学习总结(五)--Web Font与Sprite 目录 一.web font 1.1.什么是font-face 1.2.font-face优点 1.3.字体格式 1.4.使用@font-face 1.4.1.下载字体 1.4.2.使用font-face将字体引入web中 1.4.3.应用字体 1.4.4.字体格式转换 1.4.5.查看字体编码 1.4.6.base64内嵌字体 二.CSS Sprite 2.1.将小图片合并 2.2.使用CSS分离图片 2.3.小结 三.示例下载

SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载

SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载 这篇博文我们通过spring与Mybatis集成,开发一个简单用户增删改查的Web项目. 基本准备工作 1.安装JDK1.6以上版本,安装与配置 2.下载mybatis-3.2.0版:https://repo1.maven.org/maven2/org/mybatis/mybatis/ 3.下载mybatis-spring-1.2.1版:https://repo1.maven.org/maven2/org/m

【译】使用python创建一个简单的restful风格的webservice应用

这是一个如何使用python快速构建简单restful风格webservice的应用教程. 1.分析rest路由规则 rest风格的服务通常使用web.py来创建服务器端脚本,一般情况下包含两个url路径: 一个是为了查询所有用户,一个是为了查询单个用户. 例如下面的url: http://localhost:8080/users http://localhost:8080/users/{id} 2.搭建web.py环境 首先你应该安装web.py模块到你的python环境下.如果你之前没有的话

Python服务器框架学习——web.py(一)

简介: web.py 是一个Python 的web 框架,它简单而且功能强大. 安装: ubuntu系统下,我们可以只用几条指令完成web.py的安装,首先得安装pip: sudo apt-get install python-pip 之后安装web.py: sudo pip install web.py 之后进行测试,在python解释器中输入: import web 没有报错即成功. 入门 我们新建一个simple_server.py脚本,开始编写程序: 首先,导入模块: import we

Python django实现简单的邮件系统发送邮件功能

Python django实现简单的邮件系统发送邮件功能 本文实例讲述了Python django实现简单的邮件系统发送邮件功能. django邮件系统 Django发送邮件官方中文文档 总结如下: 1.首先这份文档看三两遍是不行的,很多东西再看一遍就通顺了.2.send_mail().send_mass_mail()都是对EmailMessage类使用方式的一个轻度封装,所以要关注底层的EmailMessage.3.异常处理防止邮件头注入.4.一定要弄懂Email backends 邮件发送后