Python编程(三):Python之MVC

Python编程(三):Python之MVC

很大程度上,web开发的模式演进路线和桌面UI的演进历史惊人的重合: 最开始,CGI拼字符串;对应桌面程序的console界面时代。 后来web开发开始MVC化,也基本上是借鉴桌面GUI开发时的数据库封装(Model),布局文件(View),业务逻辑(Control)。 后来web开发越来越注重用户的实时交互,从而变得富JavaScript化。个人感觉和桌面GUI库中的callback化很类似。

web开发以后的趋势应该是“控件化”,前后端的界限会变得模糊,可能会出现一套包含前后端的控件库。 比如一个登陆框,会抽象成一个类,里面包含了各种参数化的界面,动画,后端数据库映射,异常处理等等。 感觉RoR(Ruby on Rails)就有点这种发展趋势。

Python的web框架是非常非常之多的,这说明用Python开发web应用是非常流行的,但这也说明了一个 可悲的问题:Python不像Ruby那样有一个Rails似的一统天下的框架,我也经常被初学者问起Python web开发哪家强之类的问题。

Python Web框架一览:

WebFrameworks

但平时工作和技术交流过程中我们发现,常用的Python web开发框架还是比较固定的

这里我分两大类讲


  • 大而全的框架

    • Django,这个应该是现在Python界名气最大的开发框架了,真正的全功能。有个小tips,Django这个 单词,D是不发音的,所以这个单子发音大概是“坚狗”,不是“帝坚狗”。Django在实际的大型网站项目中 应用的也是比较少的,也是由于“样样行,样样都不精”。但值得一提的是Django里面有个django-admin 模块,可以用这个模块快速的开发出界面很炫酷的系统,一个朋友在这个模块上深度开发了一个项目,可以 供大家参考学习:sshwsfc/django-xadmin · GitHub

    • web2py,这个框架由于Django的出现,现在逐渐式微了。

  • 轻量级框架

    • web.py,这个框架是个有故事的框架。它的作者是天才Aaron Swartz,这个也是曾经最为流行的 Python轻量级web框架,但由于2013年作者自杀身亡后就基本停止更新了,现在用的人也逐渐变少了。

      我认为还是有必要介绍一下它的作者,一个我很崇拜的人:


      有一部关于他的纪录片,《互联网之子》 《The Internet's Own Boy: The Story of Aaron Swartz》 (2014)。 地址: 互联网之子 (豆瓣)

      2013年1月11日,美国程序员、作家、政治活动组织者、互联网活动家Aaron H. Swartz在纽约自杀身亡,享年26岁。

      Swartz出生于1986年,在14岁时,就已经加入W3C RDF核心工作组。在麻省理工学院,他与Web发明人Tim Berners-Lee一起工作,并协助开发并传播了Web上数据共享的标准,他与其他人联合写就了目前广泛使用的RSS 1.0规范。他是markdown的联合创始人,还是知名社会化新闻站点Reddit的三个拥有者之一,他还创造了python web应用框架web.py。

      Swartz曾在Stanford读过一年,然后主动退学,创立公司Infogami,该公司受到Y Combinator首次Summer Founders Program资助。

      2007年,他领导非盈利组织Open Library的创立,该组织意将世界上所有曾经出版过的书的信息都收集起来。

      此后,Swartz在哈佛道德中心实验室(Harvard's Ethics Center Lab)完成了一个研究生奖学金,研究制度腐败(Instutional Corruption)。在2010年,他创建了DemandProgress.org,发起运动“反抗互联网审查法案SOPA/PIPA”。

      2011年7月,美国联邦大陪审团起诉Swartz,罪名是他从JSTOR在线杂志档案系统上下载了海量学术性文档,并大量散发。此后,他为Avaaz基金会工作,这是一家非盈利性组织,致力于“全球web运动,将人民群众的力量带入到政府决策过程中”。

    • Flask,中文的意思是“烧瓶”。首先,我们需要明确一个概念,“轻量级”不代表功能简陋,而是设计思想。 一切MVC组件都是可替换的。其默认 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2。正因为良 好的扩展性,Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。然而,Flask保留了扩增的弹性,可以用 Flask-extension加入这些功能:ORM、窗体验证工具、文件上传、各种开放式身份验证技术。

      from flask import Flask
      app = Flask(__name__)
      
      @app.route("/")
      def hello():
          return "Hello World!"
      
      if __name__ == "__main__":
          app.run()
      
    • Bottle,中文的意思是“瓶子”。这个框架和Flask十分的的相似,相似到很多场景下把import Flask 直接改为 import bottle就能直接切换框架。但这连个框架的设计思想相差很多:

      Flask倾向于用已有的开源框架来“拼凑”出一个完整的框架,例如Werkzeug、Jinja2。避免 重复造轮子;而Bottle的作者似乎比较坚持,自己写的东西才有更好的可控性,作者也对“单文件” 的实现十分的坚持。

    我个人比较喜欢Flask的方式,Flask也的确展示出了极强的可变行,如果你想将默认的模版引擎从Jinja2替换成Mako,你甚至都不用引入任何其它的扩展。


更多精彩,请见 Reboot教育 - 高效你的学习

编辑于 2015-11-25 13:38