当前位置:首页 > webpy
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”)
共分享92篇相关文档