高手问答第 294 期 —— Python下如何利用FastAPI框架开发实用、快捷的Web商业系统?

OSC哒哒 发布于 2022/11/22 13:53
阅读 18K+
收藏 13

阅读《2024 中国开源开发者报告》赢大奖,扫码申请享特权

在全民互联网的今天,一款好使的Web商业系统,首先需要支持大并发的访问量,以满足用户的快速访问需求。在Python技术体系下,大并发响应性能最优的当属FastAPI轻量级框架,其响应性能可以跟Node.JS和Go媲美,主要受益于它是异步技术框架。

Python技术体系下提供了大量的人工智能开发框架,把人工智能技术、大数据技术融合并工程化是软件开发人员必须面对的一个问题,FastAPI为此提供了很好的Web工程化技术支撑。FastAPI支持前后端分离开发,并支持FastAPI与Django混合开发,具有强大的工程实践能力。

与Django、Flask框架相比较,Django是Python下重量级的开发框架,集成了大量的后端公共功能模块,拿来稍微完善一下就可以使用。但是它也存在一些问题,比如高度集成了关系型数据库的操作支持,对NoSQL集成未作考虑,存在NoSQL数据库接入开发难度大的问题。另外,在异步技术上与FastAPI存在很大差距。Flask 仅适用于中小规模的Web开发,不支持异步技术,无法解决大规模并发访问问题。

此外,FastAPI也有高效编码、更少代码开发Bug、智能代码编辑等优点。

OSCHINA 本期高手问答 (11 月 23 日 - 11 月 29 日) 我们一起探讨“Python下如何利用FastAPI框架开发实用、快捷的Web商业系统”的话题,做客高手问答的嘉宾是畅销书《Python FastAPI Web开发从入门到项目实战》的作者 刘瑜、安义和喻小菲 老师。

可讨论的问题包括但不限于:

  • 如何利用FastAPI快速构建Web商业应用程序?
  • 如何实现MongoDB、Redis的集成开发?
  • 如何实现FastAPI和Django混编?
  • 如何实现FastAPI和前端Vue.js同步开发?

有其他相关的问题,也欢迎提问。

嘉宾介绍

刘瑜,高级信息系统项目管理师,具有20多年C、ASP、BASIC、FoxBASE、Delphi、Java、C#、Python等编程经验,软件工程硕士、硕士企业导师、大数据重点实验室主任。开发过商业项目20余套,承担省部级千万级别项目5个,发表国内外论文10余篇。出版了《战神——软件项目管理深度实战》《NoSQL数据库入门与实践》《Python编程从零基础到项目实战》《Python编程从数据分析到机器学习实践》《算法之美——Python语言实现(微课视频版)》《Python Django Web从入门到项目实战》《Python FastAPI Web开发从入门到项目实战》。

安义,系统架构师,部门经理,具有20多年软件开发经验,主导过多个行业(医疗、教育、互联网、地产、游戏、汽车、餐饮等)的软件系统开发工作。熟悉多种开发语言和开发框架,具有丰富的软件实战经验。曾是腾讯公司负责袋鼠跳跳应用的研发负责人,目前为“三酷猫”团队的软件技术总监。《Python Django Web从入门到项目实战》《Python FastAPI Web开发从入门到项目实战》第二作者。

喻小菲,专职软件高级工程师,10余年软件项目开发经验,FastAPI专业技术群群主,承担过物联网、游戏、网络安全等10多个商业项目。主要从事Python Web方向的开发工作,对FastAPI、Sanic、Django、Flask等网络框架均有研究,始终追踪Python开发最前沿的发展方向,具有丰富的Python Web开发经验。

为了鼓励踊跃提问,我们会在问答结束后从提问者中抽取 5 名幸运会员赠予《Python FastAPI Web开发从入门到项目实战》一书。

京东购书:

https://item.jd.com/10062939804784.html#none

天猫有售:
https://detail.tmall.com/item.htm?abbucket=14&id=688018990716&rn=9918a277021797d2c811ad4111db3886&spm=a1z10.3-b-s.w4011-22696760641.22.593ab832LiOz4i

OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。

下面欢迎大家向 刘瑜、安义和喻小菲老师 积极提问,直接回帖提问即可。

加载中
0
OSC哒哒
OSC哒哒

高手问答第 294 期 —— Python 下如何利用 FastAPI 框架开发实用、快捷的 Web 商业系统?

@iman123 @赤脚小子 @zerolemon  @KelvinQ @开源博客

恭喜以上5位网友分别获得《Python FastAPI Web 开发从入门到项目实战》一书

请于12月08日12:00前登陆账号, 私信@OSC哒哒   告知快递信息(格式:姓名+电话+地址)

osc_00080505
osc_00080505
wolai
0
赤脚小子
赤脚小子

@zergan hi, 我看你们重点强调了FastAPI的异步特性带来的高性能,那我就就异步提一些问题。

1. FastAPI说异步阻塞还是异步非阻塞?

2. 我先假设是异步非阻塞,那是否实现了backpressure?

3. FastAPI是响应式编程么?基于什么模型做的,reactor?

4. 如果是响应式了,之前python生态的比如security层和db层的组件都不能用了吧,是怎么解决这部分问题的,fastapi自带解决方案还是依赖其他开源实现?

谢谢

wei2011
wei2011
回复 @chise : sqlalchemy从1.4开始已经支持异步了,而更完善的2.0版本正在beta4版本,马上就要出来了
c
chise
4 python的协程功能已经很多年了,相关的第三方包都很丰富,基本上所有需要的模块都有对应的异步版本。如果依赖的包确实没有异步版本,可以通过异步封装把同步任务异步化(比如sqlalchemy对多对多的延迟查询的异步支持方式)
c
chise
1 fastapi的异步是基于async await的关键字的异步,本质上是基于协程的上下文调度。属于异步阻塞。 2 python里面没有backpressure概念。当然如果使用了异步任务队列(例如celery)会有这个概念,但是fastapi框架本身不需要考虑。(百度了一下,只在rxjava看到了这个东西) 3 建议去看一下python的协程相关的教程。python异步基于事件驱动
0
开源博客
开源博客

@zergan 请问3个问题:

  1. FastAPI对不同前端构架的配合有何功能性或便捷性区别,如Vue、React?
  2. FastAPI对后端渲染的支持配置如何?
  3. FastAPI在Windows平台上有什么限制?
zergan
zergan
1. FastAPI是一个后端框架,为前端提供基于HTTP协议的数据接口,对于前端框架没有要求和限制。 2.您说的后端渲染是指的类似于Nuxt.js这类前端技术吧,这个并不包含在FastAPI之内, FastAPI可以使用Jinja之类的传统模板制作页面。 3. FastAPI的异步基于Linux内核的epoll(FreeBSD中的kqueue)只能在Linux(BSD)上才可以发挥出异步的性能。
0
shede333
shede333

@zergan FastAPI的插件生态如何?

zergan
zergan
FastAPI框架提供了一种依赖注入的管理方案,类似于Java中的IoC(控制反转)。 通过依赖注入可以对模块进行解藕。 FastAPI本身的实现也是遵守这个依赖注入的规范的。对于使用者引入的功能模块以依赖注入的方式存在,也就是引入的功能模块的功能和稳定性由模块自身来保证。Python生态中的模块都可以集成到FastAPI中。
0
温柔如斯
温柔如斯

@zergan 使用 fastAPI 异步编程情况下,如何保证事务的处理?保证事务的一致性及上下文的相关性?

温柔如斯
温柔如斯
回复 @chise : 接口幂等?比如我有a,b,c三个请求,a是耗时操作。b执行事务,事务中需要A的结果。这时候是不是没办法将ABC三个请求,异步同时触发了。 因为设计中B的事务失败,A的请求也不生效的。
c
chise
一般情况下,orm的事务任务是独立的db连接,所以通过传递连接id的情况下即可实现事务的上下文相关性。
0
小xu中年
小xu中年

@zergan  不知道fastapi安全性如何?比如有没有xss、csrf插件?相比py4web怎么样呢?

Come ons
Come ons
fastapi主体定位于后台框架,您提的xss,csrf都是前端框架的安全插件。fastapi本身通过fastapi.security模块提供了OAuth身份验证等安全预付机制
0
南方Go
南方Go

@zergan  1.  fastapi如何实现 MongoDB、Redis 的集成开发?  fastapi 如果要和大数据相关的数据库结合可以吗?fastapi和doris结合?

2.这种异步编程的方式,  是支持了异步技术,并发访问时,会不会有数据延时的问题,读了是老的数据?怎么解决这种异步编程,数据不一致的缓存问题?

3. 

zergan
zergan
1. fastapi是一个异步web框架,可以用异步编程的方式处理请求和响应过程,而对于数据库等第三方框架来说,是否支持异步就要依赖于数据库的驱动是否提供了异步API。 2. 并不是使用了异步的web框架,所有的东西就都变成异步了, FastAPI支持了网络请求,也提供了依赖注入的方式集成第三方框架。但是访问数据的策略还需要根据具体的框架处理,比如脏读、缓存都是数据访问的策略,不是web框架的范围
0
游游酱

我个人觉得用FastAPI做rest还是挺方便的

Come ons
Come ons
👍👍👍
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部