webpy

2019-04-21 10:30

web.py笔记

本文基于web.py cook写成。

web.py是一个非常轻量级的python web框架,使用起来非常的方便。虽然现在用python用来做网站的不是很多,但大名鼎鼎的GAE就支持python,其中就包括web.py框架,所以玩玩web.py也是很有意思的事情。

1Web.py的安装

Web.py的主页是http://webpy.org/,代码下载页面地址是http://webpy.org/download,在本页上还有着模块的安装方法,以本文的写作时间为准,代码包下载地址是

http://webpy.org/static/web.py-0.33.tar.gz,按照页面上的说明,只要把包解开,在包的目录下使用命令python setup.py install就可以自动将包安装到python中。当然,如果是在linux下也可以使用网络从软件仓库中下载安装web.py包。

2Hello World

几乎任何程序设计教材都要以Hello World作为入门程序,本文也不能免俗。

打开你的python ide(我习惯于用eclipse+pydev),当然也可以是任何一个文本编辑软件,新建一个py代码文件,写入如下代码: # -*- coding: utf-8 -*- import web

urls = (“/”, “hello”)

app = web.application(urls, globals())

class hello: def GET(self): return ?Hello, world!?

if __name__ == “__main__”: app.run()

保存,比如说叫main.py,然后在运行这个py文件,出现控制台窗口,内有http://0.0.0.0:8080/一行字,这时如果在浏览器中输入这个网址,你将看到我们刚刚建立的这个页面,当然页面很简单,只有Hello, world!这么一句话,但这就已经表明我们用web.py写的页面可以正常运行了,简单吧。

直接运行我们写的这个文件就是启动web.py内置的一个小服务器用于解析我们写的代码,这里的8080是web.py默认的端口,如果想自定义端口的话需要在运行时额外附加参数,比如如果想以80作为端口,则用命令python main.py 80。

简单介绍一下代码内容。Import web就是导入web.py包啦,urls = (“/”, “hello”)是用来指定url处理类的,具体含义和使用方法下一节讲解,app = web.application(urls, globals())表示创建一个绑定urls中指定的处理映射关系以及全局命名空间的web程序,class hello就是处理绑定到hello类的页面请求类,而GET函数就是在页面受到GET请求时要做出的反应,app.run()则是表明开始运行web.py程序,处理页面请求。

2.1Debug模式

在使用web.py内置的服务器时,程序自动处于debug模式下,在这种情况下,对模板和代码的修改可以立即反应在输出页面上,同时输出更利于调试的信息。而在正式发布到服务器上后,则默认处于非debug模式下,如果需要强制程序处于debug模式下,那么需要在代码中创建程序(app = web.application(urls, globals())命令)或模板之前使用如下命令: web.config.debug = True

2.2使用静态文件

在web.py中除了py代码文件和模板外,其他文件,比如页面中的图片、影音文件、css和js文件等,是不能直接使用的,这些文件被称为静态文件,必须集中存放在网站根目录下的static文件夹中。

比如对网址http://your.domain.name/static/logo.png的访问将发送 ./static/logo.png 给客户端。

3URL处理

Web.py提供了强大而灵活的url处理能力,也就是用户在用某url地址访问时,网站需要用那个页面代码对用户的请求作出反应。

通常对网站url的映射关系是放在一个元组对象中的,即如上节hello world代码中的urls = (“/”, “hello”)。这里表示对网站/路径的访问都由hello类来处理,也如hello world中所示,是在页面上打印出Hello, world!字样。

3.1URL匹配

url可以是具体的某一页面,如”/”仅对应网站根http://your.domain.name/,”/about”则对应http://your.domain.name/about。同时,url也可以是正则表达式,动态得对应各种url页面请求。

比如/(test1|test2)表示匹配http://your.domain.name/test1或者http://your.domain.name/test2。

如果在映射url时,使用了类似/name/(.*)这样的模式,括号中的内容可以作为参数传递给处理类的GET或POST函数。如在main.py中添加一个name类: class name: def GET(self,name): return ?Hello, %s!? % name 在url映射中修改为如下:

urls = (“/”, “hello”, “/name/(.*)”,”name”)

在用诸如http://your.domain.name/name/lisa访问网站时,就会触发name类的GET函数,并将lisa作为name参数传递给GET函数,并在返回的页面上打印Hello, lisa!。

3.2处理类结构

而对应类部分也可以包括类的包和模块名称,比如我们可以见立一个about包,包下有一个aboutme模块,模块中有一个类whoami,如下所示: class whoami: def GET(self): return ?Who am i??

在main.py中的url映射部分是:

urls = (“/”, “hello”, “/about”, “about.aboutme.whoami”)

那么,在浏览器中敲入http://your.domain.name/about ,对应的就将是这个about.aboutme.whoami类,页面上打印一句话,Who am i?

3.3页面重定向

如果希望用户访问某页面的时候自动转向其他页面,需要使用web.seeother或web.redirect。 如新建一个类redirect: class redirect: def GET(self): raise web.seeother(?/?)

在url映射中添加一条“/redirect”,”redirect”,则在访问http://your.domain.name/redirect 时会自动转向根路径,也就是hello world页面。

除了seeother,还可以使用redirect方法,区别在于,seeother是向客户端发送303 http代码,而redirect是发送的301,303是临时转向而301是永久转向,对于301,浏览器一般会缓存新地址,因此如果不是确定旧地址是需要永久性转向新地址的话,还是尽量使用seeother方法。

3.4使用子程序

在指定url映射的时候除了映射到指定类外,还可以映射到指定的子程序中去。 比如我们新建一个模块,叫做subapp.py,在其中写入如下代码: import web urls = ( “”, “sa”,

“/(.*)”, “saname” ) class sa:


webpy.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016年幼儿教育学知识考点

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: