python框架(flask/django/tornado)比较
2015-10-16 10:27
741 查看
[b]一、对外数据接口[/b]
三者作为web框架,都是通过url映射对外的接口
flask:以decorator的形式,映射到函数中
django:以字典形式,映射到函数
tornado: 以字典形式,映射到类中
flask的接口散落在整个app文件中,多了的话,稍微不易于管理;django单独集中在url.py文件中,挺好。
对于接口简单(如cms系统),映射到函数,简单明了;对于复杂的接口(富应用的web app),映射到类,更适合面向对象编程。
[b]二、可扩展性[/b]
flask:作为微型框架,它可以自由组配外部功能模块,如orm、template机制等
django:作为大而全框架,它几乎不可能组配其他外部功能模块,但是可以增加丰富它的Middlerware/contrib等
tornado:接近flask
[b]三、代码层次结构[/b]
作为framwork,三者的架构基本都是一个callable的App类为核心,
django对使用者,呈现的是mvc结构。比较符合现在的主流。当然flask/tornado都容易做到mvc,只是额外增加工作量。
[b]四、开发效率[/b]
flask:由于它协助完成功能很少,除非是小型应用,否则它开发效率比较大
django:大而全的框架,完成了session/orm/等。如果考虑安全性在内,对于一般网站,它的开发效率是非常高的。
tornado:介于flask、django之间。由于没有session机制,所以开发效率也不低。但它原生实现了websocket,所以对于开发需要很多长连接的web应用,会比较快。
[b]五、并发能力[/b]
flask:内容很少,对于大应用,性能如何,很大程度看后面人员如何扩展
django:由于代码量大,而且又是同步的,所以抗压能力很弱
tornado:异步框架,性能相对好
实际上,生产时候,都是把framework通过nginx/gevent部署,而tornado对于前面二者来说,并发性能也没有优势。
总体而言:
flask适合用于小型应用开发;如果开发团队能力强,也可以用来做大中型应用
django适合应用用于访问量不大的大中型应用
tornado适合用于开发长连接多的web应用。比如股票信息推送、网络聊天等。
参考:http://www.pythonfan.org/thread-5578-1-1.html
三者作为web框架,都是通过url映射对外的接口
flask:以decorator的形式,映射到函数中
django:以字典形式,映射到函数
tornado: 以字典形式,映射到类中
flask的接口散落在整个app文件中,多了的话,稍微不易于管理;django单独集中在url.py文件中,挺好。
对于接口简单(如cms系统),映射到函数,简单明了;对于复杂的接口(富应用的web app),映射到类,更适合面向对象编程。
[b]二、可扩展性[/b]
flask:作为微型框架,它可以自由组配外部功能模块,如orm、template机制等
django:作为大而全框架,它几乎不可能组配其他外部功能模块,但是可以增加丰富它的Middlerware/contrib等
tornado:接近flask
[b]三、代码层次结构[/b]
作为framwork,三者的架构基本都是一个callable的App类为核心,
django对使用者,呈现的是mvc结构。比较符合现在的主流。当然flask/tornado都容易做到mvc,只是额外增加工作量。
[b]四、开发效率[/b]
flask:由于它协助完成功能很少,除非是小型应用,否则它开发效率比较大
django:大而全的框架,完成了session/orm/等。如果考虑安全性在内,对于一般网站,它的开发效率是非常高的。
tornado:介于flask、django之间。由于没有session机制,所以开发效率也不低。但它原生实现了websocket,所以对于开发需要很多长连接的web应用,会比较快。
[b]五、并发能力[/b]
flask:内容很少,对于大应用,性能如何,很大程度看后面人员如何扩展
django:由于代码量大,而且又是同步的,所以抗压能力很弱
tornado:异步框架,性能相对好
实际上,生产时候,都是把framework通过nginx/gevent部署,而tornado对于前面二者来说,并发性能也没有优势。
总体而言:
flask适合用于小型应用开发;如果开发团队能力强,也可以用来做大中型应用
django适合应用用于访问量不大的大中型应用
tornado适合用于开发长连接多的web应用。比如股票信息推送、网络聊天等。
参考:http://www.pythonfan.org/thread-5578-1-1.html
相关文章推荐
- import,reload,__import__在python中的区别
- python os.path模块
- python __all__
- python-ConfigParser模块学习
- Python3利用PyMySql连接MySQL数据库
- Windows二进制文件的Python扩展包
- 64bit的python及32bit的office2010情况下pywin32无法操作access的解决方法
- 使用python的logging模块(转)
- python脚本前两行
- pyinfo():一个像 phpinfo 一样的 Python 脚本
- Python中基本的日期时间处理的学习教程
- Python中的模块导入和读取键盘输入的方法
- 解读Python编程中的命名空间与作用域
- 详解Python编程中包的概念与管理
- Python编程中的文件操作攻略
- 详解在Python程序中自定义异常的方法
- 详解使用Python处理文件目录的相关方法
- Eclipse + Pydev 配置Python开发环境
- python学习——基础(二)
- <LeetCode><Easy> 198 House Robber