当前位置: 首页 > news >正文

2-Django、Flask和Tornado三大主流框架对比

在Python的web开发框架中,目前使用量最高的几个是DjangoFlaskTornado, 经常会有人拿这几个对比,相信大家的初步印象应该是 Django大而全、Flask小而精、Tornado性能高。

了解常用框架

Django

主要特点是大而全,集成了很多组件,例如: ModelAdminForm 等等, 不管你用得到用不到,反正它全都有,属于全能型框架

  • 优点

    • Django上手也比较容易,开发文档详细、完善,相关资料丰富
    • Django的自带ORM非常优秀,综合评价略高于SQLAlchemy
    • Django自带的模板引擎简单好用,但其强大程度和综合评价略低于Jinja
    • Django目前支持Jinja等非官方模板引擎
    • Django自带的数据库管理app好评如潮
    • Django非常适合企业级网站的开发:快速、靠谱、稳定
    • Django成熟、稳定、完善,但相比于FlaskDjango的整体生态相对封闭
    • DjangoPython web框架的先驱,用户多,第三方库最丰富
  • 缺点

    • Django太重了,除了web框架,自带ORM和模板引擎,灵活和自由度不够高
    • Django能开发小应用,但总会有“杀鸡焉用牛刀”的感觉
    • Django自带ORM也使Django与关系型数据库耦合度过高,如果想使用MongoDBNoSQL数据,需要选取合适的第三方库,且总感觉Django+SQL才是天生一对的搭配,Django+NoSQL砍掉了Django的半壁江山
Flask

主要特点小而轻,原生组件几乎为0, 三方提供的组件请参考Django 非常全面,属于短小精悍型框架

  • 优点
    • Flask确实很“轻”,不愧是Micro Framework,从Django转向Flask的开发者一定会如此感慨,除非二者均为深入使用过
    • Flask自由、灵活,可扩展性强,第三方库的选择面广,开发时可以结合自己最喜欢用的轮子,也能结合最流行最强大的Python
    • 入门简单,即便没有多少web开发经验,也能很快做出网站
    • 非常适用于小型网站
    • 非常适用于开发web服务的API
    • 开发大型网站无压力,但代码架构需要自己设计,开发成本取决于开发者的能力和经验
    • 各方面性能均等于或优于Django
    • Django自带的或第三方的好评如潮的功能,Flask上总会找到与之类似第三方库
    • Flask灵活开发,Python高手基本都会喜欢Flask,但对Django却可能褒贬不一
    • Flask与关系型数据库的配合使用不弱于Django,而其与NoSQL数据库的配合远远优于Django
    • FlaskDjango更加Pythonic,与Pythonphilosophy更加吻合
  • 缺点
    • 对于大型网站开发,需要设计路由映射的规则,否则导致代码混乱
Torando

主要特点是原生异步非阻塞,在IO密集型应用和多任务处理上占据绝对性的优势,属于专注型框架

  • 优点

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

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

2. Tornado VS Django VS Flask

Tornado性能比DjangoFlask高很多

  • 底层io处理机制:

Tornadogeventasyncioaiohttp:自带异步特性,底层使用的是事件循环+协程NodejsGo语言都得益于协程轻松实现了高并发。因为Tornado内置了自己的HTTPServer, 运行和部署它与其他Python web框架不 太一样

DjangoFlask: 传统的模型,同步框架,阻塞io模型。api写同步代码,使用celery /apscheduler处理异步任务。python 传统的这种 wsgi 模型,主要是为了方便框架开发者只需要专注框架层面,而非 http 处理层面。但这样却增加了服务部署的复杂度,需要同时部署和配置 http server wsgi server ,如果想支持异步还要部署 worker

  • 性能:

最基本的 json 的序列化:DjangoFlask 占优

处理远程 http 请求的能力:Tornado 占绝对优势

数据库与模板处理性能:TornadoFlask 旗鼓相当,Django 饱受诟病的地方就是 Django ORM 确实很慢,Django 的开发效率与维护非常棒,然而 Django ORM 深度绑定了该框架,如果你需要把 Django ORM 换成其它轮子,那么也意味着 Django 的诸多优秀特性将从此告别

相关文章:

2-Django、Flask和Tornado三大主流框架对比

在Python的web开发框架中,目前使用量最高的几个是Django、Flask和Tornado, 经常会有人拿这几个对比,相信大家的初步印象应该是 Django大而全、Flask小而精、Tornado性能高。 了解常用框架 Django 主要特点是大而全,集成了很多组件,例如: Mo…...

【openssl】Window系统如何编译openssl

本文主要记录如何编译出windows版本的openss的lib库 如果需要获取RSA公钥私钥,推荐【openssl】 生成公钥私钥 |通过私钥获取公钥-CSDN博客 目录 1.下载openssl,获得openssl-master.zip。 2.下载Perl 3.下载NASM 4.配置perl和NASM的环境变量 5.进入…...

[leetcode 双指针]

1. 三数之和 M :::details 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a b c 0 ?请你找出所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例…...

Notepad++批量添加引号

工作中经常会遇到这样情景:业务给到一批订单号,需要查询这批订单的某些字段信息。在where条件中需要传入这些订单号的数组,并且订单号用引号引起,用引号隔开。 字符串之间长度相同 可以按住CtrlAlt和鼠标左键选中区域&#xff0…...

HarmonyOS4.0从零开始的开发教程04 初识ArkTS开发语言(下)

HarmonyOS(二) 初识ArkTS开发语言(下)之TypeScript入门 声明式UI基本概念 应用界面是由一个个页面组成,ArkTS是由ArkUI框架提供,用于以声明式开发范式开发界面的语言。 声明式UI构建页面的过程&#xff…...

Failed to connect to github.com port 443 after 21055 ms: Timed out

目前自己使用了梯*子还是会报这样的错误,连接不到的github。 查了一下原因: 是因为这个请求没有走代理。 解决方案: 设置 -> 网络和Internet -> 代理 -> 编辑 记住这个IP和端口 使用以下命令: git config --global h…...

Python小技巧:冻结参数,让你的代码变简洁

Python 有一些非常使用的模块, functools 就是其中之一。今天我们来说说其中的 partial 函数, partial 函数看起来平平无奇,如果你经常翻看高手们写的库,会发现很多地方都在使用这函数。 入门 我们从一个小场景开始。 现在我们需…...

如何判断电脑电源质量的好坏?

电脑电源作为电脑的关键部件直接影响到电脑的性能和寿命,因此选择一个好的电源至关重要。那么要如何判断电脑电源的好坏呢?判断的指标都有哪些呢? 1.外观检测 观察电源外观可以初步判断电脑电源的工艺质量和材料质量。外观检测需要检查电源外壳是否坚固&#xff0…...

装饰器基础知识

一、概述 装饰器是可调用的对象,其参数是另一个函数(被装饰的函数)。装饰器可能会处理被装饰的函数,然后把它返回,或者将其替换成另一个函数或可调用对象。 装饰器的一大特性是,能把被装饰的函数替换成其他…...

轻量封装WebGPU渲染系统示例<42>- vsm阴影实现过程(源码)

前向实时渲染vsm阴影实现的主要步骤: 1. 编码深度数据,存到一个rtt中。 2. 纵向和横向执行遮挡信息blur filter sampling, 存到对应的rtt中。 3. 将上一步的结果(rtt)应用到可接收阴影的材质中。 具体代码情况文章最后附上的实现源码。 当前示例源码github地址: …...

[Electron] 将应用日志文件输出

​ 日志文件输出可以使用 electron-log 模块。 electron-log 是一个用于 Electron 应用程序的日志记录库。它提供了一种简单且方便的方式来在 Electron 应用中记录日志信息,并支持将日志输出到文件、控制台和其他自定义目标。 以下是 electron-log 的一些主要特点…...

特性【C#】

C#特性是一种用于在编译时向程序元素添加声明性信息的语言结构。 下面是C#特性的使用方法: 1.使用系统提供的特性: 可以使用系统提供的特性来标记类、方法、属性等,以便在编译时进行验证或者提供其他信息。例如,可以使用Obsole…...

理解SpringIOC和DI第一课(Spring的特点),IOC对应五大注解,ApplicationContext vs BeanFactory

Spring是一个包含众多工具等Ioc容器 对象这个词在Spring范围内,称为bean Spring两大核心思想 1.IOC (IOC是控制反转,意思是控制权反转-控制权(正常是谁用这个对象,谁去创建,)-控制对象的控制权&#xf…...

【微服务】分布式限流如何实现

Sentinel 是一款阿里巴巴开源的分布式系统级流量控制组件,它提供了流量的自适应控制、熔断降级、系统负载保护等功能。下面是使用 Sentinel 实现分布式限流方案的基本步骤: 引入 Sentinel 依赖:首先在你的 Java 项目中引入 Sentinel 的相关依…...

【S32K3环境搭建】-0.3-S32DS安装实时驱动RTD(Real-Time Driver)

目录 1 什么是“实时驱动RTD(Real-Time Driver)” 2 安装“实时驱动RTD(Real-Time Driver)” 2.1 方法一:通过S32DS Extensions and Updates安装“实时驱动RTD(Real-Time Driver)” 2.2 方法二:通过Install New Software…安装“实时驱动RTD(Real-Ti…...

软件设计之适配器模式

类模式 我们知道插座的电压为交流电220V,而日常电器使用的是直流电且电压会较小,比如手机充电会通过插头适配器达到额定的输入电流。下面我们实现这个案例:将220V电压转化为5V的电压。 package Adapter.Class;public class Adapter extends …...

虚拟化逻辑架构:OVS 交换机与端口管理

目录 一、实验 1.OVS 交换机管理 2.OVS端口管理 二、问题 1.KVM下的br0和virbr0有何区别 2.OVS 虚拟交换机 与接口如何实现关联的创建和删除 3.两个ovs之间如何进行流量交互 4.虚拟网络如何和物理网络互联 一、实验 1.OVS 交换机管理 (1)查看网…...

【springboot】idea项目启动端口被占用

问题 idea本地启动springboot项目端口老是被占用 解决 关闭被占用的端口进程 步骤: 1. winR打开程序框 2. 查出被占用端口的进程id netstat -ano | finderstr 端口号 例如 netstat -ano | finderstr 81013.杀死进程 taskkill /pid 进程id -t -f 例如 taskkill /pid 2…...

linux环境下编译安装OpenCV For Java(CentOS 7)

最近在业余时间学习了一些有关图像处理的代码,但是只能本地处理,满足不了将来开放远程服务的需求。 因此,查找并参考了一些资料,成功在centos7环境安装上了opencv 460。 下面上具体安装步骤,希望能帮到有需要的同学。 …...

健康学习到 150 岁:人体系统调优不完全指南 | 开源日报 No.93

jesseduffield/lazygit Stars: 40.0k License: MIT lazygit,一个用 Go 语言编写的简单终端UI工具,可以执行 Git 命令。 该项目旨在让使用者更加方便地使用 Git,并提供了以下功能: 可视化操作:用户可以通过图形界面进…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

AspectJ 在 Android 中的完整使用指南

一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

蓝桥杯 冶炼金属

原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...