首页 > 其他分享 >Django&Tornado&Flask比较

Django&Tornado&Flask比较

时间:2023-04-30 13:22:23浏览次数:47  
标签:框架 Tornado Django Flask 第三方 模板

1.Django

Django概述

Django太重,除了web框架,自带ORM和模板引擎,灵活和自由度不够高。Django能开发小应用,但总会有“杀鸡焉用牛刀”的感觉。

Django的自带ORM非常优秀,综合评价略高于SQLAlchemy Django自带的模板引擎简单好用,但其强大程度和综合评价略低于Jinja。

Django自带ORM也使Django与关系型数据库耦合度过高,如果想使用MongoDB等NoSQL数据,需要选取合适的第三方库,且总感觉Django+SQL才是天生一对的搭配,Django+NoSQL砍掉了Django的半壁江山 Django目前支持Jinja等非官方模板引擎 。

Django非常适合企业级网站的开发:快速、靠谱、稳定,成熟,完善,但相比于Flask,Django的整体生态相对封闭。

Django是Python web框架的先驱,用户多,第三方库最丰富,最好的Python库,如果不能直接用到Django中,也一定能找到与之对应的移植 Django上手也比较容易,开发文档详细、完善,相关资料丰富

 

  优点:

    • 大和全(重量级框架)
    • 自带orm,template,view 
    • 需要的功能也可以去找第三方的app
    • 注重高效开发
    • 全自动化的管理后台(只需要使用起ORM,做简单的定义,就能自动生成数据库结构,全功能的管理后台)
    • session功能

  缺点:

    • template不怎么好用(来自自身的缺点)
    • 数据库用nosql不方便(来自自身的缺点)
    • 如果功能不多,容易臃肿

 

2.Tornado

Tornado 概述

Tornado是Facebook开源出来的框架,其哲学跟Django近乎两个极端。Tornado是异步框架Tornado基本上只算有MVC中C这一层

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

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

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

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

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

 

  优点:

    • 少而精(轻量级框架)
    • 注重性能优越,速度快
    • 解决高并发(请求处理是基于回调的非阻塞调用)
    • 异步非阻塞
    • websockets 长连接
    • 内嵌了HTTP服务器
    • 单线程的异步网络程序,默认启动时根据CPU数量运行多个实例;利用CPU多核的优势
    • 自定义模块

  缺点:

    • 模板和数据库部分有很多第三方的模块可供选择,这样不利于封装为一个功能模块

 

3.Flask概述

  Flask确实很“轻”,不愧是Micro Framework,从Django转向Flask的开发者一定会如此感慨,除非二者均为深入使用过 Flask自由、灵活,可扩展性强,第三方库的选择面广,开发时可以结合自己最喜欢用的轮子,也能结合最流行最强大的Python库 入门简单,即便没有多少web开发经验,也能很快做出网站,非常适用于小型网站 非常适用于开发web服务的API 开发大型网站无压力,但代码架构需要自己设计,开发成本取决于开发者的能力和经验,各方面性能均等于或优于Django。Django自带的或第三方的好评如潮的功能,Flask上总会找到与之类似第三方库。

  Flask灵活开发,Python高手基本都会喜欢Flask,但对Django却可能褒贬不一 Flask与关系型数据库的配合使用不弱于Django,而其与NoSQL数据库的配合远远优于Django。 Flask比Django更加Pythonic,与Python的philosophy更加吻合。

 

4.Django与Flask的应用场景

  鉴于Flask和Django的特点,如果你是开发一个REST API的系统,没有复杂的分层和逻辑的话,Flask会是一个不错的选择,因为框架内建的功能已经足够你完成这个任务;又或者,你是打算实现一个大型的系统,需要自己重新实现大部分插件的内容,Flask也还是不错,因为它足够的简单,能让你快速的读懂和扩展。

  其他的情况我还是推荐你用回Django。尤其是当你需要安装大量的Flask插件,去实现Django本来就有的功能时,你就应该意识到你需要放弃Flask。

  当然这只是个人的看法,也没有绝对这一说,主要还是看你想在框架上花费多少的时间。

 

5.为什么tornado不能使用wsgi?

  Tornado可以当作HTTP server,直接TCP开始实现HTTP服务,这也就是为啥说Tornado可以不经过WSGI。实际上它也不是CGI,CGI是指通过stdin和stdout进行HTTP的请求处理,WSGI则是包裹成一个Python对象来传递请求和响应。

  WSGI是写入PEP的python的HTTP接口,然而缺点是这个借口是完全同步的,Tornado最大的特点是可以异步处理请求,然而如果使用WSGI,那就不能做到了。官方文档明确指出,将Tornado应用作为WSGI应用时异步接口全部不可用。

  相反,Tornado可以作为HTTP server向其它框架提供WSGI容器,所以可以用Tornado来做apache/nginx/guicorn之类的事情。

  所以对Tornado而言,如果还要使用nginx之类做前置,正确的姿势应当是通过反向代理来做负载均衡。

 

6.总结

  要性能, Tornado 首选;

  要开发速度,Django 和 Flask 都行,区别是 Flask 把许多功能交给第三方库去完成了,因此 Flask 更为灵活。

  综上所述:

  Django适合初学者或者小团队的快速开发,适合做管理类、博客类网站、或者功能十分复杂需求十分多的网站

  Tornado适合高度定制,适合访问量大,异步情况多的网站

 

 




 

 

标签:框架,Tornado,Django,Flask,第三方,模板
From: https://www.cnblogs.com/lizexiong/p/17365165.html

相关文章

  • Python中django的ORM和SQLalchemy简单对比(一)
    1.ORM对象关系映射(英语:ObjectRelationMapping,简称ORM,或O/RM,或O/Rmapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。一般的ORM包括以下四部分:一个对持久类对象......
  • Django框架——Q查询进阶、ORM查询优化、事务操作、字段类型、字段参数、Ajax、Conten
    Q查询进阶fromdjango.db.modelsimportQq_obj=Q()#1.产生q对象q_obj.connector='or'#默认多个条件的连接是and可以修改为orq_obj.children.append(('pk',1))#2.添加查询条件q_obj.children.append(('price__gt',2000))#支持添加多个res=models.Book.o......
  • Django的message组件(源码分析)
    Django的Message组件(源码分析)1.配置#MESSAGE_STORAGE='django.contrib.messages.storage.fallback.FallbackStorage'#MESSAGE_STORAGE='django.contrib.messages.storage.cookie.CookieStorage'MESSAGE_STORAGE='django.contrib.messages.stor......
  • Django4全栈进阶之路23 项目实战(报修类型表):应用程序命名空间app_name和分页组件pagina
    1、应用程序命名空间app_namefromdjango.urlsimportpathfrom.importviewsfrom.viewsimportRepairDetailViewapp_name='repair'urlpatterns=[path('repair_types/',views.RepairTypeListView.as_view(),name='repair_type_list�......
  • Django笔记三十三之缓存操作
    本文首发于公众号:Hunter后端原文链接:Django笔记三十三之缓存操作这一节介绍一下如何在Django中使用redis做缓存操作。在Django中可以有很多种方式做缓存,比如数据库,比如服务器文件,或者内存,这里介绍用的比较多的使用redis作为缓存。这篇笔记主要内容如下:依赖安装se......
  • Python之路【第十七篇】:Django【进阶篇】
    原博客笔记链接:https://www.cnblogs.com/wupeiqi/articles/5246483.html 1.Model到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞:创建数据库,设计表结构和字段使用MySQLdb来连接数据库,并编写数据访问层代码业务逻辑层去调用数据访问层执行数......
  • Python之路【第十六篇】:Django【基础篇】
    原博客教材链接:https://www.cnblogs.com/wupeiqi/articles/5237704.html Python的WEB框架有Django、Tornado、Flask等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。 1.基本配置1.1创建django程......
  • Django基础(二)
    原博客笔记链接:https://www.cnblogs.com/wupeiqi/articles/4508271.html上节回顾web程序的生命周期MVC和MTV路由系统和自定义动态路由Model模版语言和simple_tag 7.Model连表操作指定映射连表条件一对一多对多#表结构#!/usr/bin/envpythoncl......
  • Django基础(一)
    原博客笔记链接:https://www.cnblogs.com/wupeiqi/articles/4491246.html1.前戏1.1pythonWeb程序众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。#!/usr/bin/envpython#coding:utf-8importsocketdefh......
  • 第四篇:白话tornado源码之褪去模板外衣的前戏
    原笔记博客链接:https://www.cnblogs.com/wupeiqi/p/4592637.html 执行字符串表示的函数,并为该函数提供全局变量本篇的内容从题目中就可以看出来,就是为之后剖析tornado模板做准备,也是由于该知识点使用的巧妙,所有就单独用一篇来介绍了。废话不多说,直接上代码:#!u......