Rendering of reStructured text is not possible, please install Docutils.
:status: 草稿 ;HuangYi; 70%;
.. contents::
建议扩展成 Python Web应用框架纵论!
撰写原则::
0. 对于Python 的 web 框架纵论, 应该中立和系统化,不能因为自个儿熟悉什么而忽视历史发展和现实着力去说,这对读者是种误导;
1. 要从读者角度,而不是开发者角度来叙述,,,
开发流程::
0. HY 提交撰写大纲
1. 开放式讨论,确认思路和内容规围和深度后,细化内容定义
2. 分头认领部分小节,组织各个领域专家进行撰写
3. 由HY 重新整合,整体调整成为风格统一的文章来
结构讨论::
Python Web应用框架纵论 ::
+-- 导论
| +-- 现状
| \-- 为什么Python 中有这么多框架?
+-- 分类
| +-- 如何来理解各种框架?
| +-- 框架的框架
| +-- 轻型框架
| +-- 一站式框架
| \-- 模板系统
+-- 细说(按照历史顺序,选择经典框架来介绍,没有PCS独立章节的,和故事没有直接提及的)
| +-- Zope/Plone (请潘俊勇撰写)
| +-- Quixote (请 阿北或是朞其它豆瓣成员 撰写)
| +-- Quixote (请 阿北 撰写)
| +-- Django (HY自写)
| \-- UliWeb (请Limodou撰写)
+-- 选择
| +-- 个人
| +-- 团队
| \-- 企业
\-- 小结
\-- 选择的痛苦
==============================
深入探讨 Python主流Web开发框架
==============================
在初步体验了一把 Django 的快速开发后,本章开始带你走入这些主流 Web 框架深处。
探索它们内部的奥秘。
在 Python 的世界,web 框架百家争鸣,
但却基本统一于 MVC 这样一个抽象的大模式之下。
对于框架来说,MVC 就像是一个骨架,骨架是一个框架的根本,骨架上缺了钙自然是万万
不行的。但我认为 Python Web 框架最重要的特质,还是对 DRY(Dont Repeat Yourself)、
COC(Convention Over Configuration) 这些基本原则的遵守,同时又在原则的纯粹性、开发
的灵活性和以及对开发者的易用性之间进行的微妙的权衡,这些都是框架设计的哲学,也是
这些框架的灵魂所在了。
但是从骨架讲起,总是比较容易理清思路的。
多少年来,MVC模式不断演化,各种变种相继出现然后消失。在 Python 的世界里,
这种种的变数,在近年却难得地达到了某种新的统一。 ::
Model数据模型
URL分发器 Controller控制器
Template模板
上图便是最基本的骨架了。当http请求进入 web 应用程序的疆域,
URL分发器首先根据提供的资源地址,
找到相应负责的控制器,控制器这里是核心的业务逻辑,
或是查询 Model 数据,在将数据填充到模板,
最终产生适当格式的资源的呈现(比如HTML);
或是处理表单,再通过 Model 持久保存数据,等等。
在搭建 Web 框架这样一座宏伟大厦的过程中,python开发者特别重视轮子的重用。
几个主流现代的框架中,组成它们的骨架和肉往往是一些独立的可重用的组件。
所以说 python 开发者都是聪明人:框架多样,可以形成激励不断创新的良性竞争;
重用性好,又可以节省昂贵的人力资源。
=========== ================= =========== =========== ==============
框架 URL分发器 模板 Model(ORM) Form 库
=========== ================= =========== =========== ==============
Django Django Django Django Django
----------- ----------------- ----------- ----------- --------------
TurboGears Object Publisher Genshi SQLAlchemy ToscaWidgets
----------- ----------------- ----------- ----------- --------------
Pylons Routes Mako SQLAlchemy ToscaWidgets
----------- ----------------- ----------- ----------- --------------
CherryPy Object Publisher -- -- --
=========== ================= =========== =========== ==============
当然这些只是几个最最基础的框架组成元素了,对于一个成熟的完善的框架来说,
还有许多必备的组件,比如cache、session、国际化(i18n)、用户验证、权限控制等等。
框架们往往还有一些自己独具的特性,比如django的app概念,
强悍的自动化后台管理程序,turbogears 的 toolbox ,与 ajax 的优秀集成等。
这些,可以称之为肉了。
Python web 框架的骨架和肉都是很灵活的。象上面这些框架,虽然默认的装备都很齐全了,
其实很多组成部分(比如模板系统)都是很松散的,完全可以很方便地进行替换。
因为web开发的实际情况是很复杂的,对于一个随时准备好迎接海量用户的
web2.0 站点来说,ORM往往成为鸡肋;而对于一个企业内部管理系统来说,一个
成熟的 ORM 却是快速开发的关键;对于程序员来说,mako 这样性能又高,又能够添加
复杂控制逻辑的模板引擎简直是完美(不过话说回来,在模板里添加太多的逻辑终究
也不是什么好事情);但对于缺乏技术背景的设计人员来说,也许会更青睐
django、genshi 这样简单易用的模板系统。
下面逐一介绍框架骨架的基本组成部分。
URL 分发器
==========
* Django
使用正则表达式定义 URL,很灵活很强大,对于懂正则的人来说是减少了学习成本,
但对于不懂的人来说则正好相反。URL 的定义集中,便于管理。示例代码: ::
* Object Publisher
相当简单实用OO且Pythonic的方式,CherryPy和TurboGears中默认使用,示例代码: ::
* Route
Pylons框架默认的方式,模仿 RoR 的 URL 映射机制,使用专门的格式描述 URL,在很多
方面(比如易用性、功能)可以看做上面两种方式的折中。示例代码: ::
模板系统
========
* Django
如果要我用一个字来形容,那就是简洁易用安全还有对设计人员友好,对于有些程序员来说,
也许有点简洁过头,当然这个主要取决与个人的审美观。示例代码: ::
* Mako
可以直接实用 Python 代码嵌入模板,可以很灵活地编写控制逻辑。mako 在运行将模板编译成
Python代码,执行效率相当高。 示例代码: ::
* Genshi
完全基于 XML 的模板,拥有很简单的控制语法,拥护web标准的页面制作同学应该会很欣慰。
同时也可以直接嵌入Python代码,满足开发人员的需求。 示例代码: ::
* Jinja
沿着 Django 模板的方向,但走得更远。拥有和 Django 模板神似的语法,也拥有简洁易用
安全还有对设计人员友好同样的好处,但同时也允许直接内嵌 Python 代码。类似 mako,
Jinja 也是编译型模板,拥有很好的执行性能。 示例代码: ::
ORM
===
* Django
仍然是一贯的 Django 风格,简洁实用,功能相对不强。示例代码: ::
定义Model
查询 更新 删除
* SQLAlchemy
无比强悍的 SQLAlchemy 是 Python 世界除 Django 以外 ORM 事实上的标准。
严谨的分层设计,支持大量的数据库后端,直接使用 Python 的查询语句,
继承、自引用(Self-referential)、eager loading、lazy loading 等等
丰富的特性。还可以直接将 Model 映射到自定义的 SQL 语句。可以说既不输于 Hibernate
强大的功能,同时不失 Python 式的优雅。 示例代码: ::
Caching
=======
* Django
提供一套统一的 API,和丰富的 cache 后端:Memcached、数据库、文件系统、内存,
甚至还有一个不cache的后端,方便开发时使用。另外如果现有这些不满意,还可以定制
自己的 cache 后端。
* Beaker
TODO
Form库
======
* Django
* FormEncode
权限管理及用户验证
==================
* Django
* TODO
其他
====
* TocsaWidgets
TODO
关于骨架和肉我们便说到这里为止,有了骨架,最后再吹一口仙气,框架便活了。
下面我们就来介绍一下这几个主流框架的灵魂:设计哲学。
Django
======
TODO
TurboGears
==========
TODO
Pylons
======
TODO
CherryPy
========
TODO