FastAPI 学习笔记

FastAPI 学习笔记

  • 0. 引言
  • 1. 快速开始
  • 2. 升级示例代码

0. 引言

在 Python 这个充满活力的生态系统中,FastAPI 应运而生,它是一个现代的、快速的 Web 框架,专注于构建 RESTful API。

无论你是一名有经验的 Python 开发人员,还是一名刚接触后端开发的新手,FastAPI 都值得一试。凭借其基于 ASGI 的异步特性、自动交互式文档、数据模型验证等优秀功能,FastAPI 让构建和维护 API 变得前所未有的高效和愉悦。

在这篇博客中,我们将一步步探索 FastAPI 的精华。从安装到项目搭建,从数据模型定义到路由处理,从中间件应用到数据库集成,无一幸免。我们还将学习如何结合 FastAPI 生态系统中的其他精彩库,打造功能丰富、高性能的 API 应用。无论你是想构建一个小巧的 API 还是开发一个复杂的企业级系统,FastAPI 都是不可多得的利器。

就让我们拥抱令人兴奋的 FastAPI,开启一段 Python Web 开发的新篇章吧!

1. 快速开始

安装 FastAPI 库,

pip install fastapi

也需要一个 ASGI 服务器,比如 Uvicorn 或 Hypercorn,用于生产环境。

pip install "uvicorn[standard]"

创建一个 main.py 文件,

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}

如何想使用异步,

from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def read_root():
    return {"Hello": "World"}


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

运行,

uvicorn main:app --reload

关于命令 uvicorn main:app --reload 的解释如下:
main: 指的是主 Python 文件 main.py(“模块”)。
app: 指的是在 main.py 内部通过 app = FastAPI() 创建的对象。
–reload: 代码变更后重启服务器,仅在开发时使用。

打开你的浏览器,访问 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} 有一个必须为 int 类型的 路径参数 item_id
  • 路径 /items/{item_id} 有一个可选的 str 类型的 查询参数 q

现在访问 http://127.0.0.1:8000/docs,

你会看到自动生成的交互式API文档(由Swagger UI提供):

在这里插入图片描述

2. 升级示例代码

将文件 main.py 修改为接收来自 PUT 请求的请求体。

使用 Pydantic 以标准 Python 类型声明请求体。

from typing import Union

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    price: float
    is_offer: Union[bool, None] = None


@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}


@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    return {"item_name": item.name, "item_id": item_id}

服务器应该会自动重新加载(因为您在上面的 uvicorn 命令中添加了 --reload)。

现在访问 http://127.0.0.1:8000/docs。

  • 交互式API文档将会自动更新,包括新的请求体部分。

在这里插入图片描述

  • 单击"Try it out"按钮,它允许您填写参数并直接与API进行交互:

在这里插入图片描述

  • 然后点击"Execute"按钮,用户界面将与您的API进行通信,发送参数,获取结果并将其显示在屏幕上:

在这里插入图片描述

FastAPI Documentation: https://fastapi.tiangolo.com

FastAPI Source Code: https://github.com/tiangolo/fastapi

未完待续!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS学习(十四)OD分析

ArcGIS学习(十四)OD分析 1.上海市KFC与麦当劳的空间聚集度分析 本任务给大家带来的内容是网络节点关系分析。网络节点关系分析一般也叫OD分析。“O”指的是起点(ORIGIN),"D”指的是终点(DESTINATION),0D分析即为基于起点到终点的分析。 网络节点关系分析我们经常…

23-Java空对象模式 ( Null Object Pattern )

Java空对象模式 实现范例 在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查Null 对象不是检查空值,而是反应一个不做任何动作的关系,这样的 Null 对象也可以在数据不可用的时候提供默认的行为…

1. OSPF 基础实验(三):邻接关系和 LSA

1.3 OSPF 的邻接关系和 LSA 1.3.1 实验介绍 1.3.1.1 学习目标 1. 阐明在多路访问网络中接入多台路由器时的邻居关系建立过程 2. 控制 OSPF DR 的选举 3. 描述 5 种类型的 LSA 的内容,以及它们的作用 1.3.1.2 实验组网介绍 设备互联方式及 IP 地址规划如图所示…

NASA数据集——亚马逊盆地与其大气边界层之间各种气溶胶和气体交换率的估计值数据

简介 Pre-LBA ABLE-2A and ABLE-2B Expedition Data ABLE 2A 和 2B(大气边界层实验)数据包括亚马逊盆地与其大气边界层之间各种气溶胶和气体交换率的估计值,以及这些气溶胶和气体在边界层和自由对流层之间的移动过程。前言 – 人工智能教程…

【五】【算法分析与设计】双指针的初见

167. 两数之和 II - 输入有序数组 给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index(1)] 和 numbers[index(2)] ,则 1 &…

Java项目源码基于springboot的家政服务平台的设计与实现

大家好我是程序员阿存,在java圈的辛苦码农。辛辛苦苦板砖,今天要和大家聊的是一款Java项目源码基于springboot的家政服务平台的设计与实现,项目源码以及部署相关请联系存哥,文末附上联系信息 。 项目源码:Java基于spr…

[计算机效率] 便笺的使用

2.4 便笺 便笺程序是一种方便用户记录、查看和编辑便签的简单应用程序。在Windows系统中,便笺通常作为系统自带的实用工具之一,可以帮助用户快速创建、编辑和组织便签,以便随时记录重要的信息、任务或提醒事项。 便笺程序通常具有以下特点&a…

岩土工程监测中振弦采集仪的选型指南与市场概况

岩土工程监测中振弦采集仪的选型指南与市场概况 振弦采集仪是岩土工程监测中常用的一种设备,用于测量土体的振动特性。它的选型指南和市场概况如下: 选型指南: 1. 测量参数:振弦采集仪可用于测量土体的振动振幅、频率、相位等参数…

美团2025春招第一次笔试题

第四题 题目描述 塔子哥拿到了一个大小为的数组,她希望删除一个区间后,使得剩余所有元素的乘积未尾至少有k个0。塔子哥想知道,一共有多少种不同的删除方案? 输入描述 第一行输入两个正整数 n,k 第二行输入n个正整数 a_i,代表…

OpenHarmony开发—购物示例应用

介绍 本示例展示在进场时加载进场动画,整体使用Tabs容器设计应用框架,通过TabContent组件设置分页面,在子页面中绘制界面。通过Navigation完成页面之间的切换。在详情页中通过 Video组件加载视频资源,使用CustomDialogController…

力扣刷题日记——L66.加一

1. 前言: 从今天开始打卡力扣,每天一道力扣题,然后将解题思路分享出来,纯原创。 2. 题目描述 给定一个由 整数 ****组成的 ****非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位&#…

使用API有效率地管理Dynadot域名,使用API设置域名隐私保护

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…

SiT技术报告阅读

论文链接:SiT: Exploring Flow and Diffusion-based Generative Models with Scalable Interpolant Transformers 报告链接:https://scalable-interpolant.github.io/ 文章目录 IntroFlow and DiffusionDiffusion-Based ModelsStochastic Interpolant an…

GPT出现Too many requests in 1 hour. Try again later.

换节点 这个就不用多说了,你都可以上GPT帐号了,哈…… 清除cooki 然后退出账号,重新登录即可

应用工程中获取Shapefile文件的图形信息并显示

本文用纯前端获取shp文件以及前后端交互的方式获取Shapefile文件中的图形信息 1.案例说明 在日常的WebGIS开发中,我们往往会面对,需要用户选择矢量数据,通过矢量数据中的空间范围信息,显示在界面上,并给用户的下一步…

wave库基本操作

wave 常见的语音信号处理python库有librosa, scipy, soundfile等等。wave库是python的标准库,对于python来说相对底层,wave不支持压缩/解压,但支持单声道/立体声语音的读取。 读取音频 import wavefile_path D:/ba.wav #文件路径 f wave…

数据库应用

约束 概念: 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的正确性、完整性、有效性、唯一性。 分类: primary key:主键约束,指定某列的数据不能重复、唯一、非空。 not null&#…

QT----计算器

目录 1 搭建标准界面2、 逻辑编写2.1 初始化 github链接:基于qt的计算器 1 搭建标准界面 按照下图搭设界面 修改样式让这计算器看起来更像一点,同时对按钮分组进行样式编辑,添加字符串name,为number,其他按键为other。之前的文章…

Linux操作系统-07-Linux安装应用

一、使用rpm安装应用(不推荐) 先下载到本地,以.rpm文件名结尾,下载完成后,再安装 rpm -qa | grep mysql #查询当前系统是否有下载过mysql包 先上传mysql的rpm安装包到linux的opt目录 安装 rpm -ivh …

CVE-2024-27199 JetBrains TeamCity 身份验证绕过漏洞2

漏洞简介 TeamCity Web 服务器中发现了第二个身份验证绕过漏洞。这种身份验证旁路允许在没有身份验证的情况下访问有限数量的经过身份验证的端点。未经身份验证的攻击者可以利用此漏洞修改服务器上有限数量的系统设置,并泄露服务器上有限数量的敏感信息。 项目官网…