Django用久了,难免会感觉到自由度不够。不可否认,这种自由度的牺牲能够带来一些好处。比如,一体化的框架(full-stack framework)能够提供全面的solution,你不需要再为cache,session,feed,orm,auth,template等问题困扰,完全按照Django的设计哲学来使用就可以了。使用Django能够快速开发应用,而且技术的统一对于团队开发来说无疑是一件好事,团队成员无需在技术选型上进行过多的争论——Django已经帮我们定好了,just DO it。

但是在提供全面的solution的同时,Django将自己打造成了一个封闭的框架。由于所有的组件都靠自己实现,可能在每一个方面都做得不够好(尽管够用)。同时为了方便使用,Django的各个组件之间耦合比较紧密,你很难将某个组件替换成你自己喜欢的库。比如Django最为人诟病的ORM和Template,如果你想替换成SQLAlchemy和Mako,几乎是不可能的事情。即使勉强使用,也会让你非常别扭。

话说天下大事,分久必合。在python web framework 的战国时代,Django几乎做到了一家独大。但如果其他的框架合纵联合,未必不能与Django一争高下。
现在这种融合的趋势已经显现,而Django如果依然固步自封,即使再强大,也会在历史的尘埃中销声匿迹。如果你不相信,我们可以追索一下事实真相,不难看出这种融合恰恰是从更加强大的Zope的分裂开始的。

在《戏说WSGI》一文中,曾经列举了几个python web框架。其中Zope是一个另类,因为Zope非常厚重,适合组织大规模的开发,构建复杂的应用。为了能够面对更高的复杂度,Zope提供了一个组件框架ZCA (Zope Component Architure),引入了接口的概念,使得复杂系统可以基于接口开发。ZCA提供了适配器组件,用于装配整个应用的各个组成部分,还进一步提供了可重用的工具组件,事件组件等。可以说,ZCA是Zope中最有价值的产品。

尽管ZCA能够将Zope提供的认证、对象发布、事务管理、授权等功能组装起来,但是这些功能在Zope之外还是很难使用。于是有了Repoze项目。Repoze的目标是将Zope的功能组件拆解出来,使得其他的python web应用能够使用。说到这里,不禁又要感慨一下WSGI的重要意义:WSGI定义了Web服务器和Web应用以及Web中间件之间的交互协议,只要支持WSGI,各种web服务器、web应用和中间件就能相互对接。而Repoze正是将Zope组件按照WSGI进行封装,从而遵循WSGI的python web 框架可以很容易使用这些组件。

最初,Repoze推出了自己的一个非常轻量级的web框架:repoze.bfg。在repoze.bfg中利用了ZCA的特性。于是python web framework世界中又多了一方势力。但恰恰是这个不起眼的小势力推动了历史的进程。repoze.bfg和Pylons类似, 几乎都是完全的策略自由(policy-free),你可以随意的指定数据持久层,模板系统等外围部分,而其核心就是约定了URL如何映射到 view 代码以及如何调用view,在这个过程中完全遵循WSGI规范。后来repoze.cfg的开发者决定将其合并到Pylons。于是拉开了Python web框架合并的序幕。这个合并的框架叫做Pyramid。无独有偶,原本基于Pylons的TurboGears也宣布开发基于Pyramid的分支。

至此,混乱的江湖看到了统一的希望,相信越来越多的python web框架会融合,或至少能够互通。或许,随着更加开放的框架的出现,Django会慢慢淡出大家的视野,让我们拭目以待。

转载于:https://www.cnblogs.com/holbrook/archive/2012/08/29/2662032.html

python web框架互相融合, Pyramid或取代Django相关推荐

  1. python twisted和flask_浅谈Python Web 框架:Django, Twisted, Tornado, Flask, Cyclone 和 Pyramid...

    Django 是一个高级的 Python Web 框架,支持快速开发,简洁.实用的设计.如果你正在建一个和电子商务网站相似的应用,那你应该选择用 Django 框架.它能使你快速完成工作,也不必担心太 ...

  2. [Link]选择一个 Python Web 框架:Django vs Flask vs Pyramid

    选择一个 Python Web 框架:Django vs Flask vs Pyramid

  3. python web框架介绍对比

    Django Python框架虽然说是百花齐放,但仍然有那么一家是最大的,它就是Django.要说Django是Python框架里最好的,有人同意也有人 坚决反对,但说Django的文档最完善.市场占 ...

  4. python写web难受-(2017)你最不建议使用的Python Web框架?

    原标题:(2017)你最不建议使用的Python Web框架? 前言 这是一篇发在知乎专栏的文章,内容是之前我提的「(2017)你最不建议使用的Python Web框架?」下的回答.不过有些话没有说完 ...

  5. python的web框架哪个最好学_2018年要学习的10大Python Web框架

    通过为开发人员提供应用程序开发结构,框架使开发人员的生活更轻松.他们自动执行通用解决方案,缩短开发时间,并允许开发人员更多地关注应用程序逻辑而不是常规元素. 在本文中,我们分享了我们自己的前十大Pyt ...

  6. python web框架对比_Python六大开源框架对比

    Python 是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Python甚至还 ...

  7. 属于web框架的python库_(2017)我不建议使用的Python Web框架

    昨天我提了一个问题 (2017)你最不建议使用的Python Web框架? 下面是在原问题下的回答,看过的同学可以点赞关闭了. --- 分割线 --- 在知乎可以看到的很多Web框架推荐,有很多内容已 ...

  8. 浅谈五大Python Web框架

    http://www.csdn.net/article/2011-02-17/292058 导读:作者飞龙写了一篇<浅谈Python Web框架>,文中他介绍了几个Python Web框架 ...

  9. pythonweb好难-(2017)我不建议使用的Python Web框架

    昨天我提了一个问题(2017)你最不建议使用的Python Web框架?下面是在原问题下的回答,看过的同学可以点赞关闭了. --- 分割线 --- 在知乎可以看到的很多Web框架推荐,有很多内容已经过 ...

最新文章

  1. as3自定义加载图片类
  2. VS修改项目名后出现的提示(warning MSB8028: The intermediate directory (Debug\) contains files shared from anoth)
  3. SpringBoot+Jquery+jsTree实现页面树型结构
  4. boost::graph模块演示 GGCL Edge 接口
  5. CodeForces - 1321B Journey Planning(思维)
  6. 数据结构与算法之暴力递归改动态规划
  7. 基础学习笔记之opencv(14):随机数发生器绘制文字
  8. 把Sublime Text3从windwos移到ubunut上
  9. .Net Compact Framework 基础篇(10)--多语言程序的定制
  10. 12.万无一失:网站的高可用架构
  11. 【易我分区大师】磁盘分区助手无损c盘扩容方法
  12. h5php大转盘抽奖,微信公众号H5抽奖幸运大转盘,PHP带后端,微信抽奖大转盘源码可以独立使用...
  13. Lab2 Defusing a Binary Bomb
  14. 抱薪者说 | 君莫:穿越山海,终成“C链小雷锋”
  15. 今天不写技术文章,摘一篇好文,呵呵(95%中国民营企业家富不过三代 子女教育存失误)
  16. 点连线的思路与js的简单实现
  17. 袖珍计算器c语言设计源码,Calculator 示例:Windows 窗体袖珍计算器
  18. 数据库原理及应用(MySQL版)MySQL实验指导参考答案(实验一到实验八)
  19. GUID [xxx] for asset ‘Packages/com.unity.plasticscm-cn/Editor/xxx/xxx‘ conflicts with: ‘Packages/com
  20. 2012伦敦奥运会垃圾邮件大战提前上演

热门文章

  1. django1.4.5配置静态文件(img,css,js)访问
  2. mahout 算法集
  3. golang协程退出
  4. linux命令端口探测
  5. MySQL第2天:MySQL的架构介绍之MySQL介绍
  6. 如果有一个类是 myClass , 关于下面代码正确描述的是?
  7. 用EXCEL实现时间戳格式和日期格互转
  8. 《spring揭秘》读书笔记一
  9. java:基本数据类型
  10. Codeforces 1009D:Relatively Prime Graph