框架介绍

什么是框架

IT语境中的框架,特指为解决一个开放性问题而设计的具备必定约束性的支撑结构。在此结构上能够根据具体问题扩展、安插更多的组成部分,从而更迅速和方便地构建完整的解决问题的方案。
————补充解释————
也就是说:
1)框架自己通常不完整到能够解决特定问题;
2)框架天生就是为扩展而设计的;
3)框架里面能够为后续扩展的组件提供不少辅助性、支撑性的方便易用的实用工具(utilities),也就是说框架时常配套了一些帮助解决某类问题的库(libraries)或工具(tools)。 约束性:针对解决特定问题的软件框架会首先定义问题的边界,进而将相关的软件组件约束在这个边界内,保持框架在解决问题方面上的内聚性。

框架产生的缘由

咱们是因为效率和易用性的考虑才产生框架。框架能节省开发时间。框架强制使用公共的约定,所以它能有效地解决一些共有的问题,好比页面渲染,assert判断,安全或者应用配置等。
这些共有的问题有个共通的特性是会在每一个web应用上都用到。 框架是很是好的,它能让决定更连贯。框架能避免咱们写一大堆自定义模块来实现这些性能,咱们所须要作的就是将这些共用模块放在框架中实现。框架节省了咱们很多的时间和精力,而且
让扩展变得更容易。可是这也是问题的根本所在。

Python中的框架

15个最受欢迎的Python开源框架(转载)php

 1、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的项目,在流量达到必定规模后,都须要对其进行重构,才能知足性能的要求。

 

  2、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   

  3、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)

    6100% WSGI 1.0兼容

    7、Unicode based

    8、详细的文件、教学

    9、Google App Engine兼容

    10、可用Extensions增长其余功能

 

  4、Cubes:轻量级Python OLAP框架

    Cubes是一个轻量级Python框架,包含OLAP、多维数据分析和浏览聚合数据(aggregated data)等工具

    Cubes的主要特性之一是它的逻辑模型,抽象物理数据并提供给终端用户层。

    

                              须要框架项目实战视频  +  Python学习交流   643692991  

 

  5、Kartograph.py:创造矢量地图的轻量级Python框架

 

    Kartograph是一个Python库,用来为ESRI生成SVG地图。Kartograph.py目前仍处于beta阶段,你能够在virtualenv环境下来测试。

    



  6、Pulsar:Python的事件驱动并发框架

 

    Pulsar是一个事件驱动的并发框架,有了pulsar,你能够写出在不一样进程或线程中运行一个或多个活动的异步服务器。
  应用

    附带如下功能

    1、Socket服务器

    2、WSGI服务器

    3、JSON-RPC

    4、Web Sockets

    5、任务队列

    6、Shell

    7、测试包

    8、django集成
  示例

    对全部请求都返回“Hello World!”做为响应

 

    


                       须要框架项目实战视频  +  Python学习交流   643692991  

  7、Web2py:全栈式Web框架

 

    Web2py是一个为Python语言提供的全功能Web应用框架,旨在敏捷快速的开发Web应用,具备快速、安全以及可移植的数据库驱动的应用,兼容Google App Engine。
  Web2py目录结构

 

    

 

  8、Falcon:构建云API和网络应用后端的高性能Python框架

       

    Falcon是一个构建云API的高性能Python框架,它鼓励使用REST架构风格,尽量以最少的力气作最多的事情。
  特性

    1、经过URI模板和资源类的路由

    2、经过请求和响应类访问headers和bodies

    3、经过异常基类响应HTTP错误等等
  基准测试

    

    

 

    
                           须要框架项目实战视频  +  Python学习交流   643692991  

  9、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集群上运行,只需稍微修改一下命令行参数:

    


  10、Buildbot:基于Python的持续集成测试框架

 

    Buildbot是一个开源框架,能够自动化软件构建、测试和发布等过程。每当代码有改变,服务器要求不一样平台上的客户端当即进行代码构建和测试,收集并报告不一样平台的构建和测试结果。

 

    

                            须要框架项目实战视频  +  Python学习交流   643692991  

  11、Zerorpc:基于ZeroMQ的高性能分布式RPC框架

 

    Zerorpc是一个基于ZeroMQ和MessagePack开发的远程过程调用协议(RPC)实现。和 Zerorpc 一块儿使用的 Service API 被称为 zeroservice。Zerorpc 能够经过编程或命令行方式调用。

    它容许你:

    1、不用修改代码便可显露python模块

    2、经过命令行远程调用这些模块

    如何把你代码中的对象暴露为一个zeroservice?

 

    

    运行以上代码,在另外一个终端,尝试链接这个zeroservice

    

  12、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  

  十3、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示例程序。

 

    

  十4、webpy: 轻量级的Python Web框架

 

    webpy的设计理念力求精简(Keep it simple and powerful),源码很简短,只提供一个框架所必须的东西,不依赖大量的第三方模块,它没有URL路由、没有模板也没有数据库的访问。这样的优势是,

  框架给开发带来的限制少,能够根据本身的需求进行定制。缺点就是,不少东西都须要本身亲自动手开发。

             虽然webpy的做者Aaron H.Swartz,一位伟大的程序员在2013年1月11日自杀身亡,结束了短暂的26年生命。可是,做为一个开源项目,目前仍是有不少开发者在持续更新。

    webpy很是的简单,语法几乎跟Python同样,如下是一个简单的示例:

 

    

                                    须要框架项目实战视频  +  Python学习交流   643692991  

  十5、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-frameworkhtml

说到Web Framework,Ruby的世界Rails一统江湖,而Python则是一个百花齐放的世界,各类micro-framework、framework不计其数,不彻底列表见:python

http://wiki.python.org/moin/WebFrameworksnginx

虽然另外一大脚本语言PHP也有很多框架,但远没有Python这么夸张,也正是由于Python Web Framework(Python Web开发框架,如下简称Python框架)太多,程序员

因此在Python社区总有关于Python框架孰优孰劣的话题,讨论的时间跨度甚至长达3-5年。web

Python这么多框架,能挨个玩个遍的人很少,坦白的说我也只稍微接触过,因此这里只能浅谈一下,欢迎懂行的朋友们补充。数据库

Djangodjango

                                                                                                

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模板的比较有意思的文章可供参考:flask

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.py

                                                                     

 

 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  

 

                                                                    

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同样,能够跟Jinja二、SQLAlchemy之类结合的很好。

不过目前无论是Bottle仍是Flask成功案例都还不多。

Quixote

之因此要特别说一下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根本就不用太在乎性能问题,流量上去了花点钱买点服务器空间好了, 简单快速的解决性能问题。
相关文章
相关标签/搜索