一文掌握异步web框架FastAPI(一)

devtools/2024/10/20 0:49:41/

 

目录

一、安装 FastAPI 和 Uvicorn(一个 ASGI 服务器):

1、ASGI 与 WSGI

2、Uvicorn 的特点

二、一个 简单的FastAPI 应用

​编辑

三、路由参数与请求体

1. 基础路由

2. 路径参数和查询参数

3、请求体

        1)JSON Data

        2)multipart/form-data,用于处理文件上传和表单数据的组合。

1、form-data:处理表单数据

2、Multi-part Data,处理文件上传

         3)Raw Data:处理纯文本数据

1、从查询参数中传参

2、从请求体中传参

4)Binary Data 格式(二进制)

5)多个请求体参数


FastAPI 是一个现代的、快速(高性能)的 web 框架,用于构建 API。它是 Python 生态中的一种新选择,其设计目的是易于使用,同时保持高性能。FastAPI 基于最新的 ASGI 标准来处理异步请求,因此它支持异步代码,这使得它在处理 I/O 阻塞操作时非常高效。

FastAPI 的主要特性包括:

  • 高性能:FastAPI 使用了 Starlette 和 Pydantic 来实现高性能。
  • 简洁的代码:FastAPI 鼓励简洁的编码风格。
  • 数据验证:FastAPI 自动从请求中获取数据,并验证它们是否符合预期的数据模型。
  • 自动文档生成:FastAPI 自动为API 创建交互式文档(使用 Swagger UI 或 ReDoc)。

一、安装 FastAPI 和 Uvicorn(一个 ASGI 服务器):

pip install fastapi uvicorn

科普一下:Uvicorn 是一个高性能的 ASGI (Asynchronous Server Gateway Interface) 服务器,用于部署异步 Python Web 框架和应用。它是基于 Python 的 asyncio 模块和标准库中的 http 服务器模块来实现的。

1、ASGI 与 WSGI

  • WSGI (Web Server Gateway Interface): 是一种 Python 标准,定义了 Web 服务器与 Python Web 应用之间的接口。传统的 Python Web 框架如 Flask 和 Django 使用的是 WSGI。
  • ASGI (Asynchronous Server Gateway Interface): 是 WSGI 的异步版本,设计用于支持异步代码。FastAPI、Quart 和 Sanic 等现代 Web 框架使用 ASGI。

2、Uvicorn 的特点

  1. 高性能: Uvicorn 利用了 asyncio 和 uvloop (一个快速的 asyncio 事件循环),可以处理大量并发连接,适合高流量网站。
  2. 异步支持: Uvicorn 支持异步代码,可以更好地利用硬件资源,减少阻塞等待的时间。
  3. 简单易用: Uvicorn 提供了一个简单的命令行工具来启动应用,同时也支持配置文件。

二、一个 简单的FastAPI 应用

模块:main.py

python">from fastapi import FastAPIapp = FastAPI()@app.get("/")
async def root():return {"message": "Hello World"}

通过命令行启动应用(切到main.py目录下):

uvicorn main:app --reload

或者在main脚本中直接启动uvicorn:

python">from fastapi import FastAPIapp = FastAPI()@app.get("/")
async def root():return {"message": "Hello World"}# 运行服务器
if __name__ == "__main__":import uvicornuvicorn.run(app, host="localhost", port=8000)

此时访问 http://localhost:8000(http://127.0.0.1:8000) 就可以看到返回的 JSON 对象。

三、路由参数与请求体

1. 基础路由

FastAPI 支持常见的 HTTP 方法,如 GET、POST、PUT、DELETE 等。

python">
from fastapi import FastAPIapp = FastAPI()@app.get("/items/{item_id}")
async def read_item(item_id: int):return {"item_id": item_id}@app.post("/items/")
async def create_item(item: dict):return item@app.put("/items/{item_id}")
async def update_item(item_id: int, item: dict):return {"item_id": item_id, **item}@app.delete("/items/{item_id}")
async def delete_item(item_id: int):return {"item_id": item_id}

定义一个发送请求的脚本:

python">
import requests
import jsondef festapi_request(method, url, headers=None, params=None):if method == 'GET':response = requests.get(url, params=params, headers=headers)elif method == 'POST':response = requests.post(url, data=params, headers=headers)elif method == 'PUT':response = requests.put(url, data=params, headers=headers)elif method == 'DELETE':response = requests.delete(url, params=params, headers=headers)else:raise ValueError('只支持GET

http://www.ppmy.cn/devtools/127147.html

相关文章

QT教程18-QPainterPath

目录 1. 基本概念 2. 创建和使用 QPainterPath 3. 添加基本图形元素 4. 组合路径 5. 路径的变换 6. 绘制路径 7. 常用方法 8. 示例:绘制一个复杂图形 9. 总结 QPainterPath 是 Qt 框架中的一个类,用于创建复杂的图形路径。它允许你定义一系列的…

利用高德API获取整个城市的公交路线并可视化(六)

记录于2024年10月,因数据获取受网站更新策略等影响可能会失效,故记录写作时间,书接上回,根据测试地铁线路也可以如法炮制,且地铁线路更少,实现起来更容易,本篇文章我们依然以厦门地铁作为示例。 先讲一下方法思路,一共四个步骤; 方法思路 高德开放平台的JS API 1.4 …

使用 Go 语言实现 WebSocket的核心逻辑

文章目录 WebSocket 简介时序图核心逻辑Client 结构与功能创建新客户端消息读取逻辑 (ReadPump)发送消息逻辑 (Send)客户端管理器 (ClientManager)WebSocket 处理器处理心跳与长连接 总结 本文将基于 Go 语言,通过使用 gorilla/websocket 库来实现一个简单的聊天应用…

未来汽车究竟该是什么样子?

24年10月14日,在中国(深圳)机器视觉展暨机器视觉技术及工业应用研讨会上,同行者分享了未来智能座舱应该长什么样子。 受此启发,个人觉得当前大多数新能源车都极力想做出电动感,但是布局传统没跳出来&#…

2063:【例1.4】牛吃牧草

【题目描述】 有一个牧场,牧场上的牧草每天都在匀速生长,这片牧场可供15头牛吃20天,或可供20头牛吃10天,那么,这片牧场每天新生的草量可供几头牛吃1天? 【输入】 (无) 【输出】 如题…

MySQL 9从入门到性能优化-二进制日志

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…

git-合并连续两次提交(一个功能,备注相同)

前言: 场景是这样,由于我是实现一个功能,先进行了一次commit,然后我发现写的有些小问题,优化了一下功能并且把代码优化了一次,于是又提交了一次。两次的提交都是以相同的备注(当然这个无所谓)&a…

第一年改考408的学校有炸过的吗?怎么应对突然改考408?

C哥专业提供——计软考研院校选择分析专业课备考指南规划 专业课改考 408 后,分数线不一定会暴涨,其变化受到多种因素影响: 可能导致分数线不暴涨甚至下降的因素: 考试难度增加:408 统考涵盖数据结构、计算机组成原理…