浅析常用的Python Web的几大框架

浅梦一笑 等级 1510 0 0

在各种语言平台中,python涌现的web框架恐怕是最多的,是一个百花齐放的世界,各种micro-framework、framework不可胜数;猜想原因应该是在python中构造框架十分简单,使得轮子不断被发明。所

以在Python社区总有关于Python框架孰优孰劣的话题。下面就给大家介绍一下python的几大框架:

Django

Django 应该是最出名的py框架,Google App Engine甚至Erlang都有框架受它影响。

Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。

Django提供的方便,也意味着Django内置的ORM跟框架内的其他模块耦合程度高。

应用程序必须使用Django内置的ORM,否则就不能享受到框架内提供的种种基于其ORM的便利;理论上可以切换掉其ORM模块,但这就相当于要把装修完毕的房子拆除重新装修,倒不如一开始就去毛胚房做

全新的装修。

Django的卖点是超高的开发效率,其性能扩展有限;采用Django的项目,在流量达到一定规模后,都需要对其进行重构,才能满足性能的要求。

而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。Django的模板系统设计十分有意思,也应该其框架内影响最大、争议最大的部分。

Django模板的设计哲学是彻底的将代码、样式分离;asp.net提倡将代码/模板分离,但技术上还是可以混合;而Django则是从根本上杜绝在模板中进行编码、处理数据的可能。

比方说,asp.net模板中可以写: <% int i; for(i==0;i<10;i++){ .... } %>

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大大小小共要安装近20个Python模块,各有各自的版本号,要升级Pylons的版本,哪个模块出了不兼容的问题都有可能,升级基本上很难很难。至今reddit的Pylons还停留在

古董的0.9.6上,SQLAlchemy也还是0.5.3的版本,应该跟这条有关系。 Pylons和repoze.bfg的融合可能会催生下一个能挑战Django地位的框架。

Tornado & web.py


Tornado( http://www.tornadoweb.org )是Facebook开源出来的框架,其哲学跟Django近乎两个极端。Tornado即是一个Web server(对此本文不作详述),同时又是一个类web.py的micro-framework。

Tornado走的是少而精的方向,它也有提供模板功能;虽然不鼓励,但作者是可以允许在模板进行少量编码(直接嵌入单行py代码)的。

如果跟asp.net相比,Tornado有点类似仅实现了AsyncHttpHandler;除此之外,全部需要自己去实现。

好吧,其实它有模板,有国际化支持,甚至还有内置的OAuth/OpenID模块,方便做第三方登录,它其实也直接实现了Http服务器。

但它没有ORM(仅有一个mysql的超简单封装),甚至没有Session支持,更不要说Django那样自动化的后台。

假设是一个大型网站,在高性能的要求下,框架的各个部分往往都需要定制,可以复用的模块非常少;一个以Django开发的网站,各部分经过不断的定制,Django框架剩下的,很有可能也就是tornado一

开始所能提供的这部分。

殊途同归。

HTTP服务器 Tornado为了高效实现Comet/后端异步调用HTTP接口,是直接内嵌了HTTP服务器。

前端无需加apache / lighttpd / nginx等也可以供浏览器访问;但它并没有完整实现HTTP 1.1的协议,所以官方文档是推荐用户在生产环境下在前端使用nginx,后端反向代理到多个Tornado实例。

Tornado本身是单线程的异步网络程序,它默认启动时,会根据CPU数量运行多个实例;充分利用CPU多核的优势。

单线程异步 网站基本都会有数据库操作,而Tornado是单线程的,这意味着如果数据库查询返回过慢,整个服务器响应会被堵塞。

数据库查询,实质上也是远程的网络调用;理想情况下,是将这些操作也封装成为异步的;但Tornado对此并没有提供任何支持。

一个系统,要满足高流量;是必须解决数据库查询速度问题的!

数据库若存在查询性能问题,整个系统无论如何优化,数据库都会是瓶颈,拖慢整个系统!

异步并不能从本质上提到系统的性能;它仅仅是避免多余的网络响应等待,以及切换线程的CPU耗费。

如果数据库查询响应太慢,需要解决的是数据库的性能问题;而不是调用数据库的前端Web应用。

对于实时返回的数据查询,理想情况下需要确保所有数据都在内存中,数据库硬盘IO应该为0;这样的查询才能足够快;而如果数据库查询足够快,那么前端web应用也就无将数据查询封装为异步的必要

就算是使用协程,异步程序对于同步程序始终还是会提高复杂性;需要衡量的是处理这些额外复杂性是否值得。

如果后端有查询实在是太慢,无法绕过,Tornaod的建议是将这些查询在后端封装独立封装成为HTTP接口,然后使用Tornado内置的异步HTTP客户端进行调用。

收藏
评论区

相关推荐

Python开发 常见异常和解决办法
1.sqlalchemy创建外键关系报错property of that name exists on mapperSQLAlchemy是Python编程语言下的一款开源软件,提供了SQL工具包及对象关系映射(ORM)工具,使得在Python中操作MySQL更加简单。在给两个表创建外键关系时可能会报错:bashsqlalchemy.exc.Arg
Django的安装与简易使用
Django的安装与简易使用 1.Django的简介Django是有Python编写的一个开源代码Web应用框架(网址:https://github.com/django/django)。他是基于MTV模式,其本质与MVC是一样的。具体是:1. M 代表模型(Model):负责业务对象和数据库的关系映射(ORM)2. T 代表模板 (Template):负责
浅析常用的Python Web的几大框架
在各种语言平台中,python涌现的web框架恐怕是最多的,是一个百花齐放的世界,各种microframework、framework不可胜数;猜想原因应该是在python中构造框架十分简单,使得轮子不断被发明。所 以在Python社区总有关于Python框架孰优孰劣的话题。下面就给大家介绍一下python的几大框架: Django Django 应该是最出
一篇文章教会你使用Django根据现有数据库反向生成models
前言Hey,大家好呀,我是码农,星期八!熟悉Django的都知道,Django真是个好东西。复制粘贴一把梭很快都能撸出来一个web,再借助Django的Models和ORM。查询简直不要太方便!!!但是,但是,但是,真的如此吗??? Django Models遇到的问题通常情况下,我们是通过python manage.py makemigrationspy
PEP 333
> > 翻译自 Python Web Server Gateway Interface v1.0 [PEP 333 - Python Web Server Gateway Interface v1.0](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.python.org%2F
13个Python web框架比较
Python程序员有很多很好的选择来创建Web应用程序和API;Django,Weppy,Bottle和Flask引领潮流。 如果正在开发一个Web应用程序并且已经选择使用Python作为构建它的语言,那么这是一个明智的选择。Python的开发成熟度,强大的库以及广泛的实际应用使其成为Web开发的必需。 现在是困难的部分:从众多可用的Python web
Asp.Net Core和Django如何选择
一、前言 ---- 最近经常听说“人生苦短,我选python”这句话,为什么python拥有如此多的粉丝,她和c#、java静态语言有哪些区别和优略呢?本篇将对python、c#主流的web框架Django和Asp.Net Core做一些分析,带给大家更多的技术认知。 ### 什么是Django Django是使用python语言开发的一套web框架,
Django基础(二):环境配置
前戏 -- ### WEB框架简介 具体介绍Django之前,必须先介绍WEB框架等概念。 web框架: 别人已经设定好的一个web网站模板,你学习它的规则,然后“填空”或“修改”成你自己需要的样子。 一般web框架的架构是这样的: ![](https://oscimg.oschina.net/oscnet/8bd358de0b49e3508a61
Flask
Python 现阶段三大主流Web框架 Django Tornado Flask 对比 =========================================== [**百度百科**](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fbaike.baidu.com%2Fitem
Flask最强攻略
首先,要看你学没学过Django 如果学过Django 的同学,请从头看到尾,如果没有学过Django的同学,并且不想学习Django的同学,轻饶过第一部分 ### 一. Python 现阶段三大主流Web框架 Django Tornado Flask 对比 1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form
Python Tornado搭建高并发Restful API接口服务
#### Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快能实现高并发。得利于其 非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架。Tornado不同于其他pytho
SQLAlchemy连接Oracle
SQLAlchemy是python下的数据库orm映射框架, 几乎支持所有常用数据库, 很受python开发者的青睐 SQLAlChemy依赖cx\_oracle 先根据自己的python版本下载oracle库: [cx\_oracle](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2F
SQLAlchemy连接Oracle
SQLAlchemy是python下的数据库orm映射框架, 几乎支持所有常用数据库, 很受python开发者的青睐 SQLAlChemy依赖cx\_oracle 先根据自己的python版本下载oracle库: [cx\_oracle](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2F
tornado框架&三层架构&MVC&MTV&模板语言&cookie&session
web框架的本质其实就是`socket`服务端再加上业务逻辑处理, 比如像是`Tornado`这样的框架. 有一些框架则只包含业务逻辑处理, 例如`Django`, `bottle`, `flask`这些框架, 它们的使用需要依赖包含`socket`的第三方模块(即 `wsgiref`)来运行 在python中常见的web框架构建模式有以下两种:
tornado配合celery及rabbitmq实现web request异步非阻塞
Tornado和Celery介绍 ================ 1.Tornado --------- > Tornado是一个用python编写的一个强大的、可扩展的异步HTTP服务器,同时也是一个web开发框架。tornado是一个非阻塞式web服务器,其速度相当快。得利于其非阻塞的方式和对 epoll的运用,tornado每秒可以处理数以千计的