Django

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的缺点主要源自Django坚持自己造所有的轮子,整个系统相对封闭,Django最为人诟病的地方有:

系统紧耦合,如果你觉得Django内置的某项功能不是很好,想用喜欢的第三方库来代替是很难的,比如下面将要说的ORM、Template。要在Django里用SQLAlchemy或Mako几乎是不可能,即使打了一些补丁用上了也会让你觉得非常非常别扭。

Django自带的ORM远不如SQLAlchemy强大,除了在Django这一亩三分地,SQLAlchemy是Python世界里事实上的ORM标准,其它框架都支持SQLAlchemy了,唯独Django仍然坚持自己的那一套。Django的开发人员对SQLAlchemy的支持也是有 过讨论和尝试的,不过最终还是放弃了,估计是代价太高且跟Django其它的模块很难合到一块。

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会有很大差异。

让人纠结的auth模块,Django的auth跟其它模块结合紧密,功能也挺强的,就是做的有点过了,用户的数据库schema都给你定好了,这样问题就来了,比如很多网站要求email地址唯一,可schema里这个字段的值不是唯一的,纠结是必须的了。

Python文件做配置文件,而不是更常见的ini、xml或yaml等形式。这本身不是什么问题,可是因为理论上来说settings的值是能够动态的改变的(虽然大家不会这么干),但这不是最佳实践的体现。

总的来说,Django大包大揽,用它来快速开发一些Web运用是很不错的。如果你顺着Django的设计哲学来,你会觉得Django很好用,越用越顺手;相反,你如果不能融入或接受Django的设计哲学,你用Django一定会很痛苦,趁早放弃的好。所以说在有些人眼里Django无异于仙丹, 但对有一些人来说它又是毒药且剧毒。

Flask

关于Python中的Web框架的大多数讨论都是从Flask开始提到的,并且有充分的理由。 Flask是一个成熟的,易于理解的框架,广泛使用且非常稳定。使用Flask进行轻量级Web项目或基本REST API几乎不可能出错,但如果试图构建更大的东西,将面临繁重的工作。

Flask的核心吸引力在于其进入门槛低。一个基本的“hello world”Flask应用程序可以在少于10行的Python中设置。广泛使用的HTML模板系统Jinja2附带了使渲染文本变得容易的框架,但是Jinja2可以换成任何数量的其他模板引擎(例如Mustache),或者可以自己动手。

简洁的名称,Flask默认省略了许多细节。例如,它没有开箱即用的数据层或ORM,也没有类似表单验证的规定。但是,它可以通过扩展进行扩展,其中有几十个,包括许多常见用例,如缓存,表单处理和验证,数据库连接等。这种默认设计允许开始设计具有绝对最小功能的Flask应用程序,然后仅在需要时将所需的部分分层。

Flask的文档和蔼可亲,易于阅读。快速入门文档非常出色地帮助启动和运行,同时还解释了为简单的Flask应用程序所做的默认选择的重要性,并且API文档充满了如何使用所有内容的良好示例。同样优秀的是“片段”的集合,这些片段是如何使用Flask完成特定任务的快速和肮脏的示例,例如如果存在如何返回对象,如果不存在则返回404错误。

Flask在2018年早些时候发布了它的里程碑1.0版本,Python 2.6和Python 3.3是支持的最低版本,并且它的许多行为最终都是一成不变的。Flask没有明确支持Python的异步语法,但是为了满足这种需求,已经剥离了一个名为Quart的与Flask相关的API兼容变体。

Bottle

瓶子是一个微框架。Bottle最初意味着构建API,它将所有内容都实现在一个源文件中。除了Python标准库之外,它没有任何依赖关系。使用Bottle进行编码可以让您更接近金属而不是使用任何全栈框架进行编码。

其默认功能包括路由,模板,实用程序以及WSGI标准的基本抽象。

路由 - 支持对函数调用映射的请求,使您可以实现干净和动态的URL

模板 - 快速和Pythonic 开箱即用,全面支持mako,jinja2和猎豹

实用程序 - 舒适地访问表单数据,文件上传,Cookie,标题和其他与HTTP相关的元数据

服务器-支持一个内置的HTTP开发服务器fapws3,比约恩,GAE,СherryPy,以及任何其他WSGI能力的HTTP服务器

Bottle是原型开发,学习Web框架组织以及构建简单个人应用的完美解决方案。

CherryPy

CherryPy是一个开源,极简主义的Web框架。它使构建Python Web应用程序与构建任何其他面向对象的程序无异。

事实上,CherryPy支持的网络应用程序是一个独立的Python应用程序,它嵌入了自己的多线程网络服务器。CherryPy应用程序可在任何支持Python的操作系统上运行(Windows,MacOS,Linux等)。它们可以部署在任何可以运行普通Python应用程序的地方。CherryPy应用程序不需要Apache,但是您可以在Apache后面运行CherryPy应用程序,以及在Lighttpd或IIS后面运行它。

CherryPy不是一个非常有限的框架,因为它允许您使用任何类型的技术进行模板化,数据访问等。但是,它仍然能够处理会话,静态,Cookie,文件上传以及web框架通常可以执行的其他任何操作。

一些默认的CherryPy功能包括:

一个HTTP / 1.1兼容WSGI线程池网络服务器

简单一次运行多个HTTP服务器

一个强大的配置系统

一个灵活的插件系统

出的现成的工具缓存,编码,会话,认证,静态内容,并等

内置支持分析,覆盖和测试

能够在Python 2.7+,Python 3.1+,PyPy,Jython和Android上运行

异步框架

Sanic

Sanic是一个构建在uvloop上的Python Web框架,专门为通过异步请求处理的快速HTTP响应而创建。

它运行在Python 3.5+上。Sanic支持异步请求处理程序,这使它与Python 3.5的异步/等待函数兼容。这提高了速度,提供了非阻塞功能。

在一个进程和100个连接的基准测试中,Sanic每秒能够处理33,342个请求。

Tornado

Tornado是一个Python Web框架和异步网络库。它使用非阻塞网络I / O并解决C10k问题(意思是说,如果配置正确,它可以处理10,000多个并发连接)。

这使它成为构建需要高性能和数万并发用户的应用程序的理想工具。

龙卷风的主要特点是:

内置的用户认证支持

实时服务

高品质的性能

基于Python的网页模板语言

非阻塞HTTP客户端

实施第三方认证和授权计划(Google OpenID / OAuth,Facebook登录,雅虎BBAuth,FriendFeed OpenID / OAuth,)

支持翻译和本土化

Pyramid

小而轻,Pyramid比Django更接近Flask甚至Falcon。因此,它非常适合于将现有Python代码公开为REST API,或者为开发人员完成大部分繁重任务的Web项目提供核心的任务。

描述Pyramid极简主义的一个好方法是“无策略”,这是在文档部分中使用的一个术语,用于讨论Pyramid如何与其他Web框架形成对比。你使用什么样的数据库或什么样的模板语言不是金字塔的关注点。

“Pyramid仅提供一种机制来映射URL以查看代码,”文档说,“以及一组用于调用这些视图的约定。可以自由地在您的应用程序中使用符合您需求的第三方组件。“

构建基本的Pyramid应用程序只需要很少的工作。与Bottle和Flask一样,Pyramid应用程序可以包含单个Python文件,除了框架本身的文件。一个简单的单路径API不需要十几行代码。其中大部分是来自... import语句和设置WSGI服务器的样板。

默认情况下,Pyramid包含Web应用程序中常见的几个项目,但它们是作为要拼接在一起的组件提供的,而不是完整的解决方案。例如,包括对用户会话的支持,它甚至还带有CSRF保护。但是对Django提供的用户帐户(例如登录或帐户管理)的支持不是交易的一部分。您必须自己滚动或通过插件添加它。表单处理和数据库连接也是如此。

Pyramid避免过于极小的一种方法是通过提供从Pyramid项目制作模板的方法来重用或重新使用先前的工作。这些模板,即Scaffolds,生成一个带有简单路由和一些入门HTML / CSS模板的Pyramid应用程序。默认情况下,Pyramid包含的支架包括一个示例启动项目和一个通过常用的Python库SQLAlchemy连接到数据库的项目。

Pyramid在测试和调试工具方面同样细长。在Pyramid应用程序中捆绑debugtoolbar扩展,将在应用程序生成的每个网页上获得一个可点击图标,该图标生成有关应用程序执行的详细信息,包括发生错误时的详细回溯。还存在记录和单元测试,即使从这个轻量级的框架中排除两个看起来也很愚蠢的项目。

Pyramid的文档很棒。除了快速浏览基础知识和教程式演练之外,还可以找到一组社区贡献的教程,用于构建各种项目和常用食谱的烹饪手册。后者包括针对大量目标环境的部署技术,从Google App Engine到Nginx。

Pyramid支持Python 2和Python 3,但不使用Python 3的异步语法。有关如何在Pyramid中利用异步的线索,请参阅aiopyramid项目,其中包括用于异步驱动的“hello world”应用程序的脚手架。

python web框架介绍对比的更多相关文章

  1. 自定义python web框架

    -- Bootstrap http://www.bootcss.com/ -- Font Awesome http://fontawesome.io/ -- bxslider http://bxsli ...

  2. Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...

  3. python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...

  4. Python web框架开发 - WSGI协议

    浏览器进行http请求的时候,不单单会请求静态资源,还可能需要请求动态页面. 那么什么是静态资源,什么是动态页面呢? 静态资源 : 例如html文件.图片文件.css.js文件等,都可以算是静态资源 ...

  5. 异步非阻塞IO的Python Web框架--Tornado

    Tornado的全称是Torado Web Server,从名字上就可知它可用作Web服务器,但同时它也是一个Python Web的开发框架.最初是在FriendFeed公司的网站上使用,FaceBo ...

  6. 浅谈Python web框架

    一.Python web框架 Web Framework,Ruby的世界Rails一统江湖,而Python则是一个百花齐放的世界,各种micro-framework.framework不可胜数,不完全 ...

  7. “脚踢各大Python Web框架”,Sanic真有这能耐么?

    在Github上,Sanic第一句介绍语就是: "Sanic is a Flask-like Python 3.5+ web server that's written to go fast ...

  8. 微型 Python Web 框架: Bottle

    微型 Python Web 框架: Bottle 在 19/09/11 07:04 PM 由 COSTONY 发表 Bottle 是一个非常小巧但高效的微型 Python Web 框架,它被设计为仅仅 ...

  9. python web框架之Tornado的简单使用

    python web框架有很多,比如常用的有django,flask等.今天主要介绍Tornado ,Tornado是一个用Python写的相对简单的.不设障碍的Web服务器架构,用以处理上万的同时的 ...

随机推荐

  1. db2 查询表前几行

    不需要那么多不需要那么多数据的时候使用fetch first xxx rows only数据的时候使用fetch first xxx rows only

  2. db2 应用的最常见状态(转)

    db2 的应用最常见的状态为UOW Executing, UOW Waiting,  Connect Completed等,这里做一个简单的介绍. UOW全称是Unit Of Work, 可以认为是事 ...

  3. MyEclipse中同时启动两个tomcat

    开发的时候,有些时候需要同时启动两个项目.首先配置tomcat,方法如下:(转载自:http://bendan123812.iteye.com/blog/1716789) 一.把Tomcat复制一份并 ...

  4. php新加扩展模块

    记录下在已经编译安装的PHP上面增加扩展模块,下面以安装mbstring.so为例 1.进入PHP源码文件中的mbstring文件夹,一般都是在ext目录 cd php-5.5.29/ext/mbst ...

  5. zcat,zgrep用法

    为减少日志文件占用的空间,很多情况下我们会将日志文件以天或周为周期打包成tar.gz 包保存.虽然这样做有利空间充分利用,但当我们想查看压缩包内的内容时确很不方便.如果只是一个tar.gz文件,可以将 ...

  6. [模式匹配] AC 自动机 模式匹配

    广义的模式匹配: https://en.wikipedia.org/wiki/Pattern_matching 字符串模式匹配: https://en.wikipedia.org/wiki/Strin ...

  7. [dev][https] 非PFS协商的https的流量的解码

    经过基础调研之后,目前准备确认实现方案,完成对https的解码. 之前的调研,传送门: http://www.cnblogs.com/hugetong/p/6670083.html 1. 需求: 以旁 ...

  8. 新的ipad,用xcode编译报错 dyld_shared_cache_extract_dylibs

    删掉  ~/Library/Developer/Xcode/iOS DeviceSupport/ 这个目录下的特定文件夹就行啦. 其实是因为  device is busy  生成文件夹过程中拔掉了设 ...

  9. 【Java】一台服务器配置多个Tomcat

    需求缘由 最近接收了一个新的工具业务:ipublish发布系统,刚接手这个业务的时候,发现每次发布新的代码 需要到群里告知大家,我要停服务几分钟,准备更新代码啦.这尼玛 哪个公司都不敢这么牛逼的和用户 ...

  10. Excel--数据透视图

    原文:https://ke.qq.com/course/289406 1.数据源注意项 2. 3.选中数据源操作 任意选中数据源表格中的单元格(有值得单元格),插入数据透视表 默认数据源区域就是整个表 ...