框架介绍
什么是框架
IT语境中的框架,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构。在此结构上可以根据具体问题扩展、安插更多的组成部分,从而更迅速和方便地构建完整的解决问题的方案。 ————补充解释———— 也就是说:
1)框架本身一般不完整到可以解决特定问题;
2)框架天生就是为扩展而设计的;
3)框架里面可以为后续扩展的组件提供很多辅助性、支撑性的方便易用的实用工具(utilities),也就是说框架时常配套了一些帮助解决某类问题的库(libraries)或工具(tools)。 约束性:针对解决特定问题的软件框架会首先定义问题的边界,进而将相关的软件组件约束在这个边界内,保持框架在解决问题方面上的内聚性。
框架产生的原因
我们是由于效率和易用性的考虑才产生框架。框架能节省开发时间。框架强制使用公共的约定,因此它能有效地解决一些共有的问题,比如页面渲染,assert判断,安全或者应用配置等。
这些共有的问题有个共通的特性是会在每个web应用上都用到。
框架是非常好的,它能让决定更连贯。框架能避免我们写一大堆自定义模块来实现这些性能,我们所需要做的就是将这些共用模块放在框架中实现。框架节省了我们不少的时间和精力,并且
让扩展变得更容易。但是这也是问题的根本所在。
Python中的框架
15个最受欢迎的Python开源框架(转载)
一、Django: Python Web应用开发框架 Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的, 即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。 Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响。Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。 Django提供的方便,也意味着Django内置的ORM跟框架内的其他模块耦合程度高。应用程序必须使用Django内置的ORM,否则就不能享受到框架内提供的种种基于其ORM的便利;理论上可以切换掉其ORM模块, 但这就相当于要把装修完毕的房子拆除重新装修,倒不如一开始就去毛胚房做全新的装修。Django的卖点是超高的开发效率,其性能扩展有限;采用Django的项目,在流量达到一定规模后,都需要对其进行重构,才能满足性能的要求。 二、Diesel:基于Greenlet的事件I/O框架 Diesel提供一个整洁的API来编写网络客户端和服务器。支持TCP和UDP。 你应该使用diesel来编写你的下一个网络应用。得益于Python使得diesel语法非常整洁,发展步伐非常迅速。非阻塞I/O使得diesel非常快速并且容易扩展。greenlets使得diesel有了unwind(to(callbacks(no)))。 nose使得测试变得容易。最后,Flask使得你不需要写一个新的网络框架来使用diesel。 示例 需要框架项目实战视频 + Python学习交流 643692991 三、Flask:一个用Python编写的轻量级Web应用框架 Flask是一个使用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2 模板引擎。 Flask使用BSD授权。 Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。 Flask没有默认使用的数据库、窗体验证工具。然而,Flask保留了扩增的弹性,可以用Flask-extension加入这些功能:ORM、窗体验证工具、文件上传、各种开放式身份验证技术。 Flask 很有趣 配置简单 特性 1、内置开发用服务器和debugger 2、集成单元测试(unit testing) 3、RESTful request dispatching 4、使用Jinja2模板引擎 5、支持secure cookies(client side sessions) 6、100% WSGI 1.0兼容 7、Unicode based 8、详细的文件、教学 9、Google App Engine兼容 10、可用Extensions增加其他功能 四、Cubes:轻量级Python OLAP框架 Cubes是一个轻量级Python框架,包含OLAP、多维数据分析和浏览聚合数据(aggregated data)等工具 Cubes的主要特性之一是它的逻辑模型,抽象物理数据并提供给终端用户层。 需要框架项目实战视频 + Python学习交流 643692991 五、Kartograph.py:创造矢量地图的轻量级Python框架 Kartograph是一个Python库,用来为ESRI生成SVG地图。Kartograph.py目前仍处于beta阶段,你可以在virtualenv环境下来测试。 六、Pulsar:Python的事件驱动并发框架 Pulsar是一个事件驱动的并发框架,有了pulsar,你可以写出在不同进程或线程中运行一个或多个活动的异步服务器。 应用 附带以下功能 1、Socket服务器 2、WSGI服务器 3、JSON-RPC 4、Web Sockets 5、任务队列 6、Shell 7、测试包 8、django集成 示例 对所有请求都返回“Hello World!”作为响应 需要框架项目实战视频 + Python学习交流 643692991 七、Web2py:全栈式Web框架 Web2py是一个为Python语言提供的全功能Web应用框架,旨在敏捷快速的开发Web应用,具有快速、安全以及可移植的数据库驱动的应用,兼容Google App Engine。 Web2py目录结构 八、Falcon:构建云API和网络应用后端的高性能Python框架 Falcon是一个构建云API的高性能Python框架,它鼓励使用REST架构风格,尽可能以最少的力气做最多的事情。 特性 1、通过URI模板和资源类的路由 2、通过请求和响应类访问headers和bodies 3、通过异常基类响应HTTP错误等等 基准测试 需要框架项目实战视频 + Python学习交流 643692991 九、Dpark:Python版的Spark DPark是一个基于Mesos的集群计算框架(cluster computing framework),是Spark的Python实现版本,类似于MapReduce,但是比其更灵活,可以用Python非常方便地进行分布式计算,并且提供了更多的功能以便更好 的进行迭代式计算。DPark的计算模型是基于两个中心思想的:对分布式数据集的并行计算以及一些有限的可以在计算过程中、从不同机器访问的共享变量类型。这个的目标是为了提供一种类似于global address space programming model的工具,例如OpenMP,但是我们要求共享变量的类型必须是那些很容易在分布式系统当中实现的,当前支持的共享变量类型有只读的数据和支持一种数据修改方式的累加器(accumulators)。 DPark具有的一个很重要的特性:分布式的数据集可以在多个不同的并行循环当中被重复利用。这个特性将其与其他数据流形式的框架例如Hadoop和Dryad区分开来。 示例 一个word counting程序 上面的脚本可以无修改的在Mesos集群上运行,只需稍微修改一下命令行参数: 十、Buildbot:基于Python的持续集成测试框架 Buildbot是一个开源框架,可以自动化软件构建、测试和发布等过程。每当代码有改变,服务器要求不同平台上的客户端立即进行代码构建和测试,收集并报告不同平台的构建和测试结果。 需要框架项目实战视频 + Python学习交流 643692991 十一、Zerorpc:基于ZeroMQ的高性能分布式RPC框架 Zerorpc是一个基于ZeroMQ和MessagePack开发的远程过程调用协议(RPC)实现。和 Zerorpc 一起使用的 Service API 被称为 zeroservice。Zerorpc 可以通过编程或命令行方式调用。 它允许你: 1、不用修改代码即可显露python模块 2、通过命令行远程调用这些模块 如何把你代码中的对象暴露为一个zeroservice? 运行以上代码,在另一个终端,尝试连接这个zeroservice 十二、Bottle: 微型Python Web框架 Bottle是一个简单高效的遵循WSGI的微型python Web框架。说微型,是因为它只有一个文件,除Python标准库外,它不依赖于任何第三方模块。 特性 1、Routing:把请求映射到函数,建立简洁动态的URLs 2、Templates:采用内置模板引擎,同时还支持 mako, jinja2, cheetah 等第三方模板 3、Utilities:便捷地读取表单数据、上传文件、 cookies、HTTP头信息和其它 HTTP相关的元数据 4、Server:内置HTTP开发服务器,并且支持 paste, fapws3, bjoern, Google App Engine, Cherrypy 或者其它任何WSGI HTTP 服务器 示例 运行上面的代码,访问http://localhost:8080/hello/bottle试试。 下载和安装 通过 或者 安装最新稳定版,或者下载bottle.py (不稳定)到你的工程目录。Bottle运行于Python 2.5+ and 3.x环境下。 需要框架项目实战视频 + Python学习交流 643692991 十三、Tornado:异步非阻塞IO的Python Web框架 Tornado的全称是Torado Web Server,从名字上看就可知道它可以用作Web服务器,但同时它也是一个Python Web的开发框架。最初是在FriendFeed公司的网站上使用,FaceBook收购了之后便开源了出来。 作为Web框架,是一个轻量级的Web框架,类似于另一个Python web 框架Web.py,其拥有异步非阻塞IO的处理方式。 作为Web服务器,Tornado有较为出色的抗负载能力,官方用nginx反向代理的方式部署Tornado和其它Python web应用框架进行对比,结果最大浏览量超过第二名近40%。 此外,它的源代码也是Python开发者学习与研究的绝佳材料。 以下是Tornado的Hello World示例程序。 十四、webpy: 轻量级的Python Web框架 webpy的设计理念力求精简(Keep it simple and powerful),源码很简短,只提供一个框架所必须的东西,不依赖大量的第三方模块,它没有URL路由、没有模板也没有数据库的访问。这样的优点是, 框架给开发带来的限制少,可以根据自己的需求进行定制。缺点就是,很多东西都需要自己亲自动手开发。 虽然webpy的作者Aaron H.Swartz,一位伟大的程序员在2013年1月11日自杀身亡,结束了短暂的26年生命。但是,作为一个开源项目,目前还是有很多开发者在持续更新。 webpy非常的简单,语法几乎跟Python一样,以下是一个简单的示例: 需要框架项目实战视频 + Python学习交流 643692991 十五、Scrapy:Python的爬虫框架 网络爬虫,是在网上进行数据抓取的程序,使用它能够抓取特定网页的HTML数据。虽然我们利用一些库开发一个爬虫程序,但是使用框架可以大大提高效率,缩短开发时间。Scrapy是一个使用Python编写的, 轻量级的,简单轻巧,并且使用起来非常的方便。 Scrapy使用了Twisted异步网络库来处理网络通讯。整体架构大致如下(注:图片来自互联网): Scrapy主要包括了以下组件: 1、引擎,用来处理整个系统的数据流处理,触发事务。 2、调度器,用来接受引擎发过来的请求,压入队列中,并在引擎再次请求的时候返回。 3、下载器,用于下载网页内容,并将网页内容返回给蜘蛛。 4、蜘蛛,蜘蛛是主要干活的,用它来制订特定域名或网页的解析规则。 5、项目管道,负责处理有蜘蛛从网页中抽取的项目,他的主要任务是清晰、验证和存储数据。当页面被蜘蛛解析后,将被发送到项目管道,并经过几个特定的次序处理数据。 6、下载器中间件,位于Scrapy引擎和下载器之间的钩子框架,主要是处理Scrapy引擎与下载器之间的请求及响应。 7、蜘蛛中间件,介于Scrapy引擎和蜘蛛之间的钩子框架,主要工作是处理蜘蛛的响应输入和请求输出。 8、调度中间件,介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。 使用Scrapy可以很方便的完成网上数据的采集工作,它为我们完成了大量的工作,而不需要自己费大力气去开发。
常用的开发框架
转载:http://feilong.me/2011/01/talk-about-Python-web-framework
说到Web Framework,Ruby的世界Rails一统江湖,而Python则是一个百花齐放的世界,各种micro-framework、framework不可胜数,不完全列表见:
http://wiki.python.org/moin/WebFrameworks
虽然另一大脚本语言PHP也有不少框架,但远没有Python这么夸张,也正是因为Python Web Framework(Python Web开发框架,以下简称Python框架)太多,
所以在Python社区总有关于Python框架孰优孰劣的话题,讨论的时间跨度甚至长达3-5年。
Python这么多框架,能挨个玩个遍的人不多,坦白的说我也只稍微接触过,所以这里只能浅谈一下,欢迎懂行的朋友们补充。
Python框架虽然说是百花齐放,但仍然有那么一家是最大的,它就是Django。要说Django是Python框架里最好的,有人同意也有人 坚决反对,但说Django的文档最完善、市场占有率最高、招聘职位最多估计大家都没什么意见。Django为人所称道的地方主要有:
完美的文档,Django的成功,我觉得很大一部分原因要归功于Django近乎完美的官方文档(包括Django book)。 全套的解决方案,Django象Rails一样,提供全套的解决方案(full-stack framework + batteries included),基本要什么有什么(比如:cache、session、feed、orm、geo、
auth),而且全部Django自己造,开发网 站应手的工具Django基本都给你做好了,因此开发效率是不用说的,出了问题也算好找,不在你的代码里就在Django的源码里。 强大的URL路由配置,Django让你可以设计出非常优雅的URL,在Django里你基本可以跟丑陋的GET参数说拜拜。 自助管理后台,admin interface是Django里比较吸引眼球的一项contrib,让你几乎不用写一行代码就拥有一个完整的后台管理界面。 系统紧耦合,如果你觉得Django内置的某项功能不是很好,想用喜欢的第三方库来代替是很难的,比如下面将要说的ORM、Template。要在Django里用SQLAlchemy或Mako几乎是不可能,即使
打了一些补丁用上了也会让你觉得非常非常别扭。
Template功能比较弱,不能插入Python代码,要写复杂一点的逻辑需要另外用Python实现Tag或Filter。关于模板这一点,一直以来争论比较多,最近有两篇关于Python模板的比较有意思的文章可供参考:
1 http://pydanny.blogspot.com/2010/12/stupid-template-languages.html(需FQ) 2 http://techspot.zzzeek.org/2010/12/04/in-response-to-stupid-template-languages/
URL配置虽然强大,但全部要手写,这一点跟Rails的Convention over configuration的理念完全相左,高手和初识Django的人配出来的URL会有很大差异。
数据库schema都给你定好了,这样问题就来了,比如很多网站要求email地址唯一,可schema里这个字段的值不是唯一的,纠结是必须的了。
总的来说,Django大包大揽,用它来快速开发一些Web运用是很不错的。如果你顺着Django的设计哲学来,你会觉得Django很好用,越用越顺手;相反,你如果不能融入或接受Django的设计哲学,你用Django一定会很痛苦,趁早放弃的好。所以说在有些人眼里Django无异于仙丹, 但对有一些人来说它又是毒药且剧毒。
Pylons & TurboGears & repoze.bfg
除了Django另一个大头就是Pylons了,因为TurboGears2.x是基于Pylons来做的,而repoze.bfg也已经并入Pylons project里这个大的项目里,后面不再单独讨论TurboGears和repoze.bfg了。
Pylons和Django的设计理念完全不同,Pylons本身只有两千行左右的Python代码,不过它还附带有一些几乎就是Pylons御用 的第三方模块。Pylons只提供一个架子和可选方案,你可以根据自己的喜好自由的选择Template、ORM、form、auth等组件,系统高度可 定制。我们常说Python是一个胶水语言(glue language),那么我们完全可以说Pylons就是一个用胶水语言设计的胶水框架。
选择Pylons多是选择了它的自由,选择了自由的同时也预示着你选择了噩梦:
学习噩梦,Pylons依赖于许多第三方库,它们并不是Pylons造,你学Pylons的同时还得学这些库怎么使用,关键有些时候你都不知道你 要学什么。Pylons的学习曲线相对比Django要高的多,而之前Pylons的官方文档也一直是人批评的对象,好在后来出了The Definitive Guide to Pylons这本书,这一局面有所改观。因为这个原因,Pylons一度被誉为只适合高手使用的Python框架。
调试噩梦,因为牵涉到的模块多,一旦有错误发生就比较难定位问题处在哪里。可能是你写的程序的错、也可能是Pylons出错了、再或是SQLAlchemy出错了、搞不好是formencode有bug,反正很凌乱了。这个只有用的很熟了才能解决这个问题。
Pylons和repoze.bfg的融合可能会催生下一个能挑战Django地位的框架。
Tornado即是一个Web server(对此本文不作详述),同时又是一个类web.py的micro-framework,作为框架Tornado的思想主要来源于Web.py,大家在Web.py的网站首页也可以看到Tornado的大佬Bret Taylor的这么一段话(他这里说的FriendFeed用的框架跟Tornado可以看作是一个东西):
“[web.py inspired the] Web framework we use at FriendFeed [and] the webapp framework that ships with App Engine…”
因为有这层关系,后面不再单独讨论Tornado。
一个框架精简的好处在于你可以聚焦在业务逻辑上,而不用太多的去关心框架本身或受框架的干扰,同时缺点也很明显,许多事情你得自己操刀上。
我个人比较偏好这种精简的框架,因为你很容易通过阅读源码弄明白整个框架的工作机制,如果框架那一块不是很合意的话,我完全可以Monkey patch一下按自己的要求来。
Bottle和Flask作为新生一代Python框架的代表,挺有意思的是都采用了decorator的方式配置URL路由,如:
from bottle import route, run @route('/:name') def index(name='World'): return '<b>Hello %s!</b>' % name run(host='localhost', port=8080)
Bottle、Flask跟web.py一样,都非常精简,Bottle甚至所有的代码都在那一个两千来行的.py文件里。另外Flask和Pylons一样,可以跟Jinja2、SQLAlchemy之类结合的很好。
不过目前不管是Bottle还是Flask成功案例都还很少。
之所以要特别说一下Quixote,是因为国内的最大的用Python开发的网站“豆瓣网”是用Quixote开发的。我只简单翻了一下源代码,没有做过研究,不发表评论,有经验的来补充下。我只是在想,如果豆瓣网交到现在来开发,应该会有更多的选择。
其它(web2py、uliweb、Karrigell、Werkzeug …)
最后关于框架选择的误区
在框架的选择问题上,许多人很容易就陷入了下面两个误区中而不自知:
1. 哪个框架最好——世上没有最好的框架,只有最适合你自己、最适合你的团队的框架。编程语言选择也是一个道理,你的团队Python最熟就用Python好了,如果最熟悉的是Ruby那就用Ruby好了
,编程语言、框架都只是工具,能多、快、好、省的干完活就是好东西。 2. 过分关注性能——其实大部分人是没必要太关心框架的性能的,因为你开发的网站根本就是个小站,能上1万的IP的网站已经不多了,上10万的更是很少很少。在没有一定的访问量前谈性能其实是
没有多大意义的,因为你的CPU和内存一直就闲着呢。而且语言和框架一般也不会是性能瓶颈,性能问题最常出现在数据库访问和文件读写上。 PHP的Zend Framework是出了名的慢,但是Zend
Framework一样有大站,如:digg.com;常被人说有性能问题的Ruby和Rails,不是照样可以开发出twitter吗?再者现在的硬 件、带宽成本其实是很低的,特别有了云计算平台后,人力成本
才是最贵的,没有上万的IP根本就不用太在意性能问题,流量上去了花点钱买点服务器空间好了, 简单快速的解决性能问题。
posted on 2017-11-24 18:45 WorthWaitingFor 阅读(350) 评论(0) 编辑 收藏 举报