http://kanrs.com/3_0.html
麻油四喜欢花花草草。
没有花花草草喜欢他。
群芳丛中过,片叶不沾身。
人常道:没有谈过恋爱的大学,是不完整的。
生命如此短暂而宝贵,麻油四不想留下遗憾。
一点儿遗憾也不想要。
某日,他和同样孑然一身的阿牛对酒言愁。
说着说着,阿牛提议:“来写个学校的交友网站吧,广结天下良缘,也算是一种善事。”
“好啊,好啊”,麻油四终于不胜酒力,醉卧沙场。
麻油四深深地吸了口清晨的空气,从他枕边发现了阿牛留下的字条和小册子。
字条上只有八个字:“看懂册子 过来找我”。
又是一本破旧的小册子,封面上写着“Python写网站入门 作者:阿牛”,麻油四翻看了起来。
一座高山,一位老人,一个少年。
“用Python写网站,最可怕的技术是什么?”少年问老人:“是不是名动天下的Zope?”
“以前也许是,现在却不是了。”
“为什么?”
“因为Zope自从1996年初出江湖,到如今已经有十多年。十年的光阴,足以让许多事情改变。”老人黯然叹息。
“那个企业应用为王的时代已经过去,那些复杂而厚重的框架,已日渐衰落。”
少年仰望高山,山巅白云悠悠。
“那是什么?”少年又问老人:“是不是插件众多的Django?”
“不是。”
“是不是很小很轻量的web.py?”
“不是。”
“是不是Pylons?”
“不是。”
“是不是Facebook发布的Tornado?”
“不是。”
“我想起来了。”少年说得极有把握:“是世界上最大的纯Python网站--豆瓣,用的Quixote。”
“也不是,”老人道:“你说的这些技术虽然都很可怕,却不是最可怕的一种。”
“最可怕的一种是什么?”
“是WSGI, 一个接口与两个参数。”
“一个接口?”少年惊奇极了:“当今天下,用Python写网站,最可怕的技术只有一个接口与两个参数?”
“是的。”
学Python ,三天就可以上手了。(Python教程 链接 )
Google、Yahoo、YouTube、NASA(美国航空航天局)、FriendFeed、豆瓣、网易游戏、搜狐邮箱,都是Python的忠实用户。
而用Python写网站,选择丰富。常见的有:
Zope,早期的Python框架,著名的Plone内容管理系统(CMS)基于其开发,用户包括GE、美国海军、波士顿在线,和Java类似,Zope也有一套自成体系的服务器,数据库。
Quixote,也是一个早期的Python框架,豆瓣网(douban.com)基于其开发,它的起源是因为用Zope写的代码难以维护和调试。
Django,当下最流行的Python框架,玩聚网(ju690.com),好看簿(haokanbu.com)基于其开发,它能自动生成一套后台管理的界面,很适合用于快速完成小项目。
web.py,非常轻量级的一个Python框架,sohu邮箱基于其开发,它也常用于嵌入式设备。
Pylons,由各种Python库整合而成的框架,reddit.com 基于其开发,基于WSGI,可定制性好。
还有一些比较特别的框架,比如
Facebook(FriendFeed部门)发布的Tornado http://www.tornadoweb.org/
IBM(Second Life部门)发布的Mulib http://wiki.secondlife.com/wiki/Mulib
国人沈崴的Eurasia http://code.google.com/p/eurasia/
这三款框架共同的特点是支持大量并发的连接,写网页游戏,网页聊天室不妨考虑一下它们。
事实上,用Python按照自己的需求,搭建一个框架是非常轻松的事情,以至于有篇文章教你用3个小时,60行代码编写一个垃圾框架(http://code.google.com/p/robaccia/ ,robaccia,意大利语的垃圾)。
好吧,还是先从环境配置开始。首先,安装Python。
然后安装MySQL-Python,用于连接MySQL数据库。
MySQL-Python迟迟没有发布Python2.6的官方Windows编译版,所以从http://www.codegood.com/archives/4 下载非官方编译的Python2.6版的MySQL-Python 链接 安装。
安装完MySQL-Python后,下载 http://peak.telecommunity.com/dist/ez_setup.py 双击运行,这样就安装了Python的包管理。
然后在我的电脑上右键点击
--> 属性
--> 高级
--> 环境变量 -- 系统变量 -- Path -- 双击出现编辑框
--> 在已经内容的结尾加上 ;C:/Python26/Scripts;C:/Python26/;
--> 点击确定
--> 点击环境变量页面的确定
如图所示
图:设置环境变量开始 --> 运行 --> 输入 cmd --> 输入
easy_install -U mypy就可以安装我们用到的网站开发框架mypy -- 一个在WSGI基础上搭建起来框架。
WSGI是一种协议规范,一个最简单的WSGI程序仅需要几行代码:
def application(environ, start_response): status = '200 OK' response_headers = [('Content-type','text/plain')] start_response(status, response_headers) return ['Hello']它有两个参数,environ和start_response。
environ参数是一个内建的python字典类型, 用于传递变量,比如REQUEST_METHOD,各种中间件的扩展变量。
start_response则是一个函数,参数为状态码和响应的header。
函数的返回值是一个列表,也是网页的正文。
WSGI简单易扩展,符合Python的哲学 -- Pythonic 。
WSGI的基础上,延伸出各式各样的中间件,你可以组装出你需要的功能。事实上,世上所有的框架本来都只不过是一些零碎的组件,一定要拼凑在一起之后,才会成称为框架。
只是,不要试图去找一个无所不能,举世无双的框架。
很多人都错在了这一点,他们执着于框架的优劣。
他们希望找一个好的框架,大幅提高开发效率,保证项目进度,超越性能瓶颈,消灭网站漏洞。
他们在论坛上口水战,在博客中相互鄙视,自以为掌握了通往天国的钥匙。
然而,“银弹”这两个字根本就不存在,那只不过是某些自大狂妄的人,心里的一种幻觉,他们迟早都必将死在自己的这种幻觉中。
框架是程序员手中的兵器。
兵器是死的。
好的兵器,只有在最聪明的人的手里,才能显示其无比威力。
还是先从mypy框架说起 -- 首先,新建一个项目。
python -m mypy.cmd new ppmm这里ppmm便是项目名称。在生成的ppmm目录下,可以看到有三个python文件:
init_app.py dev_server.py simple_server.pyinit_app.py 用于初始化网站。
simple_server.py,是一个简单的纯Python服务器,默认端口是9888。
dev_server.py 是开发用的服务器,当修改网站中Python文件时,会自动重启,默认端口是9889。
运行dev_server.py,访问 http://127.0.0.1:9889 ,就可以看到默认的提示页面了。
其他的目录结构如下
myconf myfile mylib mysitemyconf,配置文件所在的路径;myfile,静态文件所在路径;mylib,定制的Python库所在路径。
mysite 中为网站代码,其中又有四个目录:
ctrl model modeltest htm utilctrl,control的缩写,这里写页面相关的逻辑。
model,操作数据库的后台逻辑代码所在目录。
modeltest,后台逻辑单元测试代码所在目录。
htm,放置网页模板。
util,公用的函数,如分页等。
接下来,开始写一个基本功能 -- 用户注册。
大家可以先用SVN检出 http://mayoufour.googlecode.com/svn/trunk/stdyun/ 。
这里是最终项目的代码,可以边学边对比。
运行它需要配置一些数据库,参见 3.3小节,数据库,ORM 与 单元测试 。
配置完数据库,导入stdyun/mytool/create_table下的tabel.sql,便可以运行。导入的命令如下:
mysql -u用户名 -p密码 数据库名 < tabel.sql