python的FastAPI 快速入门

news2024/9/19 13:41:35

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益:

  1. 了解大厂经验
  2. 拥有和大厂相匹配的技术等

希望看什么,评论或者私信告诉我!

文章目录

  • 一、前言
  • 二、FastAPI
    • 2.1 FastAPI安装
    • 2.2 FastAPI基本使用
        • 2.2.1 get方法
      • 2.2.2 put方法
      • 2.2.3 中间件 app.middleware
      • 2.2.4 异常处理 app.exception\_handle
  • 三、总结
  • 四、参考


一、前言

最近在做公司内部的RAG,也就是基于大模型的检索增强,专门针对公司内部的私有化数据。在这个过程中,使用了 FastAPI 来做整个 服务端 的开发。接下来我们就整体了解一下 FastAPI,争取做到基本入门

二、FastAPI

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.8+ 并基于标准的 Python 类型提示。

关键特性:

  • 快速:可与 NodeJSGo 并肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。

  • 高效编码:提高功能开发速度约 200% 至 300%。*

  • 更少 bug:减少约 40% 的人为(开发者)导致错误。*

  • 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。

  • 简单:设计的易于使用和学习,阅读文档的时间更短。

  • 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。

  • 健壮:生产可用级别的代码。还有自动生成的交互式文档。

  • 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。

2.1 FastAPI安装

pip install fastapi
pip install uvicorn

Uvicorn 为 ASGI 服务器,其主要为了解决传统的同步服务器在处理大量并发请求而性能降低的问题

2.2 FastAPI基本使用

2.2.1 get方法
 from typing import Union
 from fastapi import FastAPI
 
 app = FastAPI()
 
 @app.get("/")
 def read_root():
   return {"Hello": "World"}
   
 @app.get("/items/{item_id}")
 def read_item(item_id: int, q: Union[str, None] = None):
   return {"item_id": item_id, "q": q}

使用浏览器访问 http://127.0.0.1:8000/items/5?q=somequery。

你将会看到如下 JSON 响应:

{"item_id": 5, "q": "somequery"}

你已经创建了一个具有以下功能的 API:

  • 通过 路径 //items/{item_id} 接受 HTTP 请求。
  • 以上 路径 都接受 GET 操作(也被称为 HTTP 方法)。
  • /items/{item_id} 路径 有一个 路径参数 item_id 并且应该为 int 类型。
  • /items/{item_id} 路径 有一个可选的 str 类型的 查询参数 q

2.2.2 put方法

    from typing import Union
    from fastapi import FastAPI

    app = FastAPI()
    
    @app.put("/items/{item_id}")
    def read_item(item_id: int, q: Union[str, None] = None):
        return {"item_id": item_id, "q": q}

2.2.3 中间件 app.middleware

    from fastapi import FastAPI, Request

    app = FastAPI()

    @app.middleware("http")
    async def log_requests(request: Request, call_next):
        print(f"Received request: {request.method} {request.url}")
        response =await call_next(request)
        print(f"Sent response: {response.status_code}")
        return response

    @app.get("/")
    def root():
        return {"message": "Hello, World!"}

在 FastAPI 中,app.middleware 是一个装饰器,用于注册中间件函数。中间件函数可以在请求处理函数执行前或执行后对请求和响应进行处理,例如添加请求头、记录日志、验证身份等。

其中,middleware_function 是中间件函数的名称,"http" 是中间件的类型,表示它是一个 HTTP 请求中间件。request 是请求对象,call_next 是一个回调函数,用于调用下一个中间件或请求处理函数。在中间件函数中,我们可以在调用 call_next(request) 前后对请求和响应进行处理。

在这个示例中,我们定义了一个名为 log_requests 的中间件函数,它会在每个请求处理前和处理后打印请求和响应的信息。然后我们使用 app.middleware 装饰器将其注册到应用程序中。最后,我们定义了一个 GET 请求处理函数 root,它返回一个 JSON 格式的响应。

2.2.4 异常处理 app.exception_handle

from fastapi import FastAPI, HTTPException

app = FastAPI()

@app.exception_handler(ValueError)
async def value_error_handler(request, exc):
    raise HTTPException(status_code=400, detail=str(exc))

@app.get("/")
async def root():
    raise ValueError("Invalid query parameter")

@app.exception_handler 是 FastAPI 框架中的一个装饰器,用于处理应用程序中未处理的异常。当应用程序抛出未处理的异常时,FastAPI 将自动调用由 @app.exception_handler 装饰的函数,并将异常作为参数传递给该函数。这使得开发人员可以在应用程序中集中处理异常,而不必在每个路由处理程序中编写重复的异常处理代码。

在上面的代码中,当 root 路由处理程序抛出 ValueError 异常时,FastAPI 将自动调用 value_error_handler 函数,并将异常作为参数传递给该函数。value_error_handler 函数将异常转换为 HTTPException 并将其重新引发,从而返回一个带有 400 状态码和异常详细信息的 HTTP 响应。

三、总结

FastAPI 是一个现代、快速的 web 框架,使用 Python 3.8+ 并基于标准的 Python 类型提示。它具有极高的性能、高效的编码、更少的 bug、智能的编辑器支持、简单易学的设计、健壮的生产可用级别代码以及基于开放标准的标准化特性。文章详细介绍了 FastAPI 的安装、基本使用、HTTP 方法、中间件和异常处理。

四、参考

fastapi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1533494.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ESM对比CommonJS

以下内容均总结自es-modules-a-cartoon-deep-dive 1. ESM是异步的而CommonJS是同步的 异步是ESM面临的最大挑战。和CommonJS的执行环境Node获取模块文件的方式不同,ESM获取模块文件是通过网络。如果ESM从获取到执行所有模块都是顺序进行会导致主线程长期处于pendi…

AI预测福彩3D第15弹【2024年3月20日预测--第3套算法重新开始计算第4次测试】

今天咱们继续对第3套算法进行第4次测试,第3套算法加入了012路的权重。废话不多说了,直接上结果吧~ 最终,经过研判分析,2024年3月21日福彩3D的七码预测结果如下: 百位:4 5 7 1 0 6 2 十位:3 1 5 …

第十节HarmonyOS 常用容器组件4-Grid与GridItem

1、描述 网格容器,由行和列分割的单元格所组成,通过指定“项目”所在的单元格做出各种各样的布局。 子组件 包含GridItem子组件。 3、接口 Grid(scroller?: Scroller) 4、参数 参数名 参数类型 必填 描述 scroller Scroller 否 可滚动组件…

安科瑞智能断路器产品介绍【可监可控 远程操控 短路保护】

开发背景 过去几年智慧用电的产品应用中,大多数只安装于进线测。主要存在以下几个问题:难定位,不知道具体哪个回路出线问题,排查困难;出线过载或线缆温度过高无法知晓;即使是出线回路安装了的场景&#xf…

uniapp+uview 学习笔记(二)—— H5开发

文章目录 前言一、开发步骤1.创建项目2.安装组件库并导入使用3.封装请求4.国际化5.打包 总结 前言 本文主要介绍使用uniapp框架和uview组件库进行H5开发,需要用到的开发工具为HBuilder X。 一、开发步骤 1.创建项目 打开HBuilder X,在顶部栏目选择 新…

英国教育部学生信息中心

你是否曾因学历无法得到国内雇主的认可而感到困扰?别担心,英国教育部学校信息中心为你解忧!作为英国政府官方认可的学历认证机构,其权威性和可靠性广受认可,为留学生求职提供了强大的支持。 一、打破求 职困境:学历真实性认证的重要性 在求职过程中,学历的真实性和有效性是雇…

电脑照片分辨率怎么调?这款dpi修改工具好用

许多考试平台在上传证件照片的时候,大多都会对图片分辨率有具体要求,但是如果遇上手上的图片分辨率达不到要求,那么怎么改图片分辨率呢?可以利用专业的dpi修改工具来处理,比如今天分享的就是一个在线修改图片分辨率的方…

积鼎CFD发动机燃烧仿真,实现航空航天发动机内部燃烧过程的流体仿真

航空航天发动机中的燃烧现象是一种复杂的物理化学过程,包括流动、雾化、相变、传热传质、点火熄火、化学反应、污染物排放、热声振荡和冷却等多个过程,加上燃烧的非定常性和高湍流度,使得准确模拟燃烧过程变得异常困难。在传统CFD模拟需要考虑…

javaSwing推箱子游戏

一、简介 策略性游戏可以锻炼人的思维能力还能缓解人的压力,使人们暂时忘却生活当中的烦恼,增强人们的逻辑思维能力,游戏的艺术美也吸引着越来越多的玩家和厂商,寓教于乐,在放松人们心情的同时还可以活跃双手。在人类…

扩展学习|数字经济与公共管理的相关论文(管理世界)

一是如何建立与数字经济时代相适应的政府监管体制机制? 问题一和二来源:[1]王岭.数字经济时代中国政府监管转型研究[J].管理世界,2024,40(03):110-126204127.DOI:10.19744/j.cnki.11-1235/f.2024.0027. (1)数字经济时代政府监管转…

ByteTrack多目标跟踪——YOLOX详解

文章目录 1 before train1.1 dataset1.2 model 2 train2.1 Backbone2.2 PAFPN2.3 Head2.3.1 Decoupled Head2.3.2 anchor-free2.3.3 标签分配① 初步筛选② simOTA 2.3.4 Loss计算 项目地址: ByteTrack ByteTrack使用的检测器是YOLOX,是一个目前非常流行…

在 NVIDIA DGX Cloud 上使用 H100 GPU 轻松训练模型

近期,我们正式宣布推出 DGX 云端训练 (Train on DGX Cloud) 服务,这是 Hugging Face Hub 上针对企业 Hub 组织的全新服务。 通过在 DGX 云端训练,你可以轻松借助 NVIDIA DGX Cloud 的高速计算基础设施来使用开放的模型。这项服务旨在让企业 H…

vue2 项目运行 浏览器自动打开 vue项目启动如何自动打开浏览器 vue2取消浏览器自动打开浏览器,vue2关闭自动打开浏览器

1. 找到package.json 2. 找到scripts 在后面添加 --open即可: 3. 运行npm run serve 运行之后,就可以自动打开默认浏览器 4. 同理,不想自动打开 ,将 --open 删除即可!

【机器学习】基于布谷鸟搜索算法优化的BP神经网络分类预测(CS-BP)

目录 1.原理与思路2.设计与实现3.结果预测4.代码获取 1.原理与思路 【智能算法应用】智能算法优化BP神经网络思路【智能算法】布谷鸟搜索算法(CS)原理及实现 2.设计与实现 数据集: 数据集样本总数2000 多输入多输出:样本特征24&#xff0…

选择器加练习

一、常用的选择器 1.元素选择器 语法 : 标签名{} 作用 : 选中对应标签中的内容 例:p{} , div{} , span{} , ol{} , ul{} ...... 2.类选择器(class选择器) 语法 : .class属性值{} 作用 : 选中对应class属性值的元素 注意:class里面的属性值不能以数字开头,如果以符号开头,…

鸿蒙Harmony应用开发—ArkTS-属性动画

组件的某些通用属性变化时,可以通过属性动画实现渐变过渡效果,提升用户体验。支持的属性包括width、height、backgroundColor、opacity、scale、rotate、translate等。布局类改变宽高的动画,内容都是直接到终点状态,例如文字、can…

C++之模版详解

一.array与vector对比 由图发现&#xff0c;使用array数组是必须提前开好空间&#xff0c;而vector是顺序表&#xff0c;可以实现动态开辟空间 array也支持迭代器&#xff0c;如下&#xff1a; int main() {array<int, 10> arr{ 1,2,3,4,5,6,7,8,9,10 };auto it arr.be…

蓝牙HFP协议推荐的语音丢包补偿算法浮点实现的定点化

最近在做蓝牙的宽带语音通话。相对于蓝牙窄带语音&#xff0c;主要变化是把采样率从8k变到16k&#xff0c;以及编解码器从CVSD变成mSBC&#xff08;modified SBC&#xff0c;改进的SBC&#xff09;等。蓝牙语音通话相关的HFP&#xff08;Hand Free Profile&#xff09;强烈建议…

第1关:创建数据库

任务描述 创建一个名为mydata的数据库。 相关知识 MySQL创建数据库的语法如下&#xff1a; 其中&#xff0c;database_name是要创建的数据库的名称。 开始你的任务吧&#xff0c;祝你成功&#xff01; #请在此处添加实现代码 ########## Begin ########## CREATE DATABASE …

如何有效防止员工摸鱼

在现代企业中&#xff0c;员工的工作效率直接影响到公司的运营和发展。然而&#xff0c;有时员工在上班时间会出现摸鱼现象&#xff0c;这不仅浪费了工作时间&#xff0c;还影响了团队的整体氛围和工作效率。 为了有效解决这一问题&#xff0c;本文将探讨一系列具体措施&#…