Django
Django是高水准的Python编程语言驱动的一个开源模型.视图,控制器风格的Web应用程序框架,它起源于开源社区。使用这种架构,可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序。
主要特点是大而全,集成了很多组件,属于全能型框架。
- 大而全,开发效率高。它的MTV框架,自带的ORM,admin后台管理,自带的sqlite数据库和开发测试用的服务器,给开发者提高了超高的开发效率。
- 重量级框架,功能齐全,自带ORM和模板引擎,支持jinja等非官方模板引擎。
- 自带ORM使Django和关系型数据库耦合度高,如果要使用非关系型数据库,需要使用第三方库。
- 自带数据库管理app,session功能
- 成熟,稳定,开发效率高,相对于Flask,Django的整体封闭性比较好,适合做企业级网站的开发。python web框架的先驱,第三方库丰富。
缺点:
- template不好用
- 数据库用nosql不方便
- 如果功能不多,容易臃肿
应用场景:
- 主要是用于速开发,快速开发,节约成本,如果要实现高并发,就要对django进行二次开发。
Tornado
主要特点是原生异步非阻塞,在I/O密集型应用和多任务处理上占绝对性的优势,属于专注型框架。
- 少而精(轻量级框架)
- 注重性能优越,速度快,性能优越,它最出名的异步非阻塞的设计方式。
- 解决高并发(请求处理是基于回调的非阻塞调用)
- 异步非阻塞
- websockets长连接
- 内嵌了HTTP服务器
- 单线程的异步网络程序,默认启动时根据CPU数量运行多个实例,利用CPU多核的优势
- 自定义模块
缺点:
- 模板和数据库部分有很多第三方的模块可供选择,这样不利于封装为一个功能模块。
应用场景:
- Tornado是一种Web服务器软件的开源版本。Tornado和现在的主流Web服务器框架(包括大多数Python的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其非阻塞的方式和对epoll的运用,Tornado每秒可以处理数以千计的连接因此Tornado是实时Web服务的一个理想框架。
Flask
主要特点是小而轻,原生组件几乎为零,三方提供的组件非常全面,属于短小精悍型框架。
- 轻量级的框架,自由,灵活,可扩展性强,核心基于Werkzeug WSGI工具 和jinja2 模板引擎。
- 适用于做小网站以及web服务的API,开发大型网站无压力,但架构需要自己设计。
- 与关系型数据库的结合不弱于Django,而与非关系型数据库的结合远远优于Django。
- 简单,Flask的路由以及路由函数由修饰器设定,开发人员不需要借助其他文件匹配。
- 配置灵活,有多种方法配置,不同环境的配置也非常方便。Flask运行不需要借助其他任何软件,只需要安装了Python的IDE,在命令行运行即可。只需要在Python中导入相应包即可满足所有需求。
- 入门简单,通过官方指南便可以清楚的了解Flask的运行流程。
- 低耦合,Flask可以兼容多种数据库、模板。
缺点:
- 对于大型网站开发,需要设计路由映射规则,否则导致代码混乱。
应用场景
- 轻量级,主要是用来写接口的一个框架,实现前后端分离,提考开发效率,Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login),都需要用第三方的扩展来实现。比如可以用Flask-extension加入ORM、文件上传、身份验证等。Flask没有默认使用的数据库,你可以选择MySQL,也可以用NoSQL。
其WSGI工具箱用Werkzeug(路由模块),模板引擎则使用Jinja2,这两个也是Flask框架的核心。
参考资料
Django、Tornado、Flask优缺点
Python高效开发之Django、Flask、Tornado三大主流 Python web框架的对比以及各自的应用场景
Python3web框架—Django、Tornado、Flask的对比