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

python web框架哪家强?Flask、Django、FastAPI对比

前言

当你掌握了python的基础知识,并且会用和HTML和CSS编写简单的静态网页。现在你只需再掌握一个python web框架的知识,就可以开始编写一个动态的网站了。目前市面比较流程的python web框架有三个flask、Django、FastAPI。接下来我们对比一下。他们三个各自有什么特点。

Flask、Django、FastAPI 对比

下面我们从维度有性能、实时性、异步特性、稳定性、扩展性、社区支持、对restful支持、适用场景这几个维度对比三款python web框架。

维度/框架FlaskDjangoFastAPI
性能中等,同步框架中等,同步框架,但具有优化ORM高,异步框架,适合高并发
实时性基本不支持,需借助外部库基本不支持,需借助外部库支持,异步特性有助于实时应用
异步特性不支持,需使用外部库或服务器不支持,但可使用Channels实现支持,内置异步功能
稳定性稳定,成熟框架非常稳定,广泛使用较新,但迅速成熟
扩展性高,插件和扩展丰富高,内置大量功能高,易于集成其他异步库
社区支持大型社区,丰富的资源非常大的社区,广泛的文档和资源活跃的社区,增长迅速
对RESTful支持通过扩展和插件良好支持通过Django REST framework实现内置支持,易于构建REST API
适用场景轻量级应用,微服务大型应用,全栈框架高性能API服务,微服务

详细说明:

  • Flask: 轻量级框架,适合小型项目和微服务。由于是同步的,性能在高并发场景下可能受限,但通过使用异步服务器或库可以部分解决。社区支持非常强大,有大量的插件和扩展可供选择。

  • Django: 全功能的Web框架,内置了ORM、模板引擎等。适合构建大型应用,但同步的特性可能在处理大量并发请求时成为瓶颈。Django的社区非常庞大,有丰富的文档和第三方库。

  • FastAPI: 现代的异步框架,基于Python 3.6+的类型提示。性能高,非常适合构建高性能的API服务。FastAPI的社区正在迅速增长,虽然不如Flask和Django成熟,但发展势头强劲。

异步概念理解
对于初学编程的伙伴,可能不太理解异步的概念,我这里举一个例子帮助你理解。

  • 如果web框架不支持异步。你可以想象新冠期间做核酸检测的场景(假设核酸检测点只有一组设备只能,只能排一个长队),很多人排长队到一个站点做核酸检测,监测点站点同一时间不能给多个人做核酸,只能检测完前面的人才能再检测后边的人。这里排队的人要做核酸检测就相当于用户在浏览器发起对web服务器的请求,检测点给排队的人做检测,相当于服务器对客户端做出的响应。同一时间多个人要做核酸也只能给一个人做检测,相当于web服务器同一时间只能接受一个客户端请求,响应完前面的用户请求才能处理后面的请求。
  • 如果web框架支持异步。你可以想象在餐厅用餐,同一个时间,可以多个人点餐,点餐完成后厨房可以同时为多个用户准备菜品。这个过程就是异步的。

总结

通过以上对比可以看出三个框架各有所长,但是作为初学者,我的建议是先学习Flask框架,可能Flask并不适合做大型网站程序(如果编写高性能的网站,采用前后端分裂的架构,选择FastAPI是个明智的选择),但是它被广泛用于编写大模型应用的web界面,这种本地部署的应用几乎对web框架性能和异步特性没有要求。另外Flask对比另外两个框架,更加简单易学,甚至你抽出一个周末或一上午的时间,就可以用它搭建一个差不多的WEB应用。我们把更多的时间和精力放在更有意义的业务和智能应用上面不香吗。

相关文章:

  • idea导入文件里面的子模块maven未识别处理解决办法
  • 外部存储器
  • 【Vue】图片懒加载的实现
  • 【计算机】我不允许还有人不知道数据库是什么
  • Rust语言-线程间的消息传递mpsc::Sender
  • echarts Y轴展示时间片段,series data数据 也是时间片段,鼠标放上去 提示框显示对应的时间片段
  • 【计算机毕业设计】​206校园顺路代送微信小程序
  • 基于S32K144驱动NSD8308
  • 梯度提升决策树(GBDT)的训练过程
  • P10552 [THUPC2024] 警钟长鸣
  • 【安全】Linux Fanotify使用入门
  • 计算机基础学习有多重要?学哪些?如何学?
  • 基于SpringBoot+Vue大学生网络教学平台设计和实现(源码+LW+调试文档+讲解等)
  • mongodb嵌套聚合
  • DataWhale - 吃瓜教程学习笔记(二)
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • github指令
  • laravel with 查询列表限制条数
  • PHP变量
  • PHP那些事儿
  • spring学习第二天
  • WebSocket使用
  • yii2中session跨域名的问题
  • 测试如何在敏捷团队中工作?
  • 第十八天-企业应用架构模式-基本模式
  • 技术:超级实用的电脑小技巧
  • 前端工程化(Gulp、Webpack)-webpack
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • Java总结 - String - 这篇请使劲喷我
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​比特币大跌的 2 个原因
  • ​什么是bug?bug的源头在哪里?
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • ######## golang各章节终篇索引 ########
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (3)llvm ir转换过程
  • (42)STM32——LCD显示屏实验笔记
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (六)Flink 窗口计算
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (转) ns2/nam与nam实现相关的文件
  • (转)VC++中ondraw在什么时候调用的
  • (转)大型网站架构演变和知识体系
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • **CI中自动类加载的用法总结
  • .java 9 找不到符号_java找不到符号
  • .Net接口调试与案例
  • ??在JSP中,java和JavaScript如何交互?
  • @DS 多数据源 + @Transactional(rollbackFor = Exception.class) 导致@DS 多数据源没法使用
  • @NestedConfigurationProperty 注解用法
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [000-002-01].数据库调优相关学习