Python FastAPI 实战应用指南

在这里插入图片描述

文章目录

    • 1. 前言
    • 2. FastAPI 的优势
    • 3. FastAPI 快速入门
      • 3.1 安装
      • 3.2 最简单的 API 案例
    • 4. 基础功能应用
      • 4.1 模型验证和参数校验
      • 4.2 实现高级计划:用于实时功能和快速发布
    • 5. 高级应用
      • 5.1 实现 OAuth2 认证
      • 5.2 提供 WebSocket 支持
    • 6. 总结

1. 前言

FastAPI 是一个进一步提升 Python Web 开发效率和性能的框架,具有高性能,易于使用,并提供一次性文档。本文将通过一些实战案例来认识 FastAPI 的基本功能和高级应用。

2. FastAPI 的优势

  1. 带有完善的自动文档生成:根据模型定义,自动生成丰富的 API 文档,兼存 Swagger UI 和 ReDoc。
  2. 高效性:基于 Starlette 和 Pydantic ,提供优秀性能和数据校验。
  3. 完善的支持性:支持 WebSocket,GraphQL,OAuth2。
  4. 最新高级功能:完全保持 Python 代码的高级引擎和控制。

3. FastAPI 快速入门

3.1 安装

确保已安装 Python 3.7+:

pip install fastapi uvicorn

注:Uvicorn 是一个高性能的 ASGI 引擎,用于运行 FastAPI 应用。

3.2 最简单的 API 案例

创建文件 main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "欢迎使用 FastAPI!"}

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

启动服务器:

uvicorn main:app --reload

访问 http://127.0.0.1:8000 和 Swagger UI:http://127.0.0.1:8000/docs


4. 基础功能应用

4.1 模型验证和参数校验

使用 Pydantic 模型来校验数据:

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None

@app.post("/items/")
def create_item(item: Item):
    return {"item": item}

提供备选参数,进行文档化。

4.2 实现高级计划:用于实时功能和快速发布

这里例如使用 BackgroundTasks:

from fastapi import BackgroundTasks

def write_log(message: str):
    with open("log.txt", "a") as log:
        log.write(message + "\n")

@app.post("/log/")
def log_message(message: str, background_tasks: BackgroundTasks):
    background_tasks.add_task(write_log, message)
    return {"message": "Log recorded!"}

5. 高级应用

5.1 实现 OAuth2 认证

FastAPI 支持 OAuth2 和 JWT:

from fastapi.security import OAuth2PasswordBearer

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

@app.get("/users/me")
def read_users_me(token: str = Depends(oauth2_scheme)):
    return {"token": token}

5.2 提供 WebSocket 支持

from fastapi import WebSocket

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    while True:
        data = await websocket.receive_text()
        await websocket.send_text(f"Message text was: {data}")

6. 总结

FastAPI 是完善的选择,适合构建低带宽、高性能的 API。通过本文中的案例,希望你能够快速上手并创建自己的实现。

  • fastapi 教程

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

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

相关文章

Vue3 项目打包并部署到Nginx

一、安装Nginx 官网下载链接: nginx: downloadhttps://nginx.org/en/download.htmlhttps://nginx.org/en/download.html 下载后解压并双击 nginx.exe 启动服务: 打开浏览器,访问 http://localhost/ ,若出现如下页面&#xff0c…

二叉树(了解)c++

二叉树是一种特殊的树型结构,它的特点是: 每个结点至多只有2棵子树(即二叉树中不存在度大于2的结点) 并且二叉树的子树有左右之分,其次序不能任意颠倒,因此是一颗有序树 以A结点为例,左边的B是它的左孩子,右边的C是…

会议签到系统的架构和实现

会议签到系统的架构和实现 摘要:通过定制安卓会议机开机APP呈现签到界面,并且通过W/B结构采集管理签到信息,实现会议签到的功能。为达到此目标本文将探讨使用Redis提供后台数据支持;使用SocketIo处理适时消息;使用Flask进行原型开…

PIC单片机HEX文件格式分析

在调试PIC单片机在bootloader程序时,需要将hex文件转换为bin文件,在转换之前先了解一下hex文件中数据是如何定义的。 直接打开一个LED灯闪烁的程序生成的hex文件,芯片型号为PIC18F46K80 可以看到每条数据都是由6部分组成的,下面分…

17-使用椭圆制作鼻子

17-使用椭圆制作鼻子_哔哩哔哩_bilibili17-使用椭圆制作鼻子是一次性学会 Canvas 动画绘图(核心精讲50个案例)2023最新教程的第18集视频,该合集共计53集,视频收藏或关注UP主,及时了解更多相关视频内容。https://www.bi…

通过 Visual Studio Code 启动 IPython

在Visual Studio Code 中,你可以使用内置的终端来启动 ipython,当然首先要安装好ipython。 安装ipython的方法是在cmd里面输入以下命令安装: pip install ipython 启动ipython的步骤如下: 打开 VSCode 终端: 在 VSCo…

网络(三) 协议

目录 1. IP协议; 2. 以太网协议; 3. DNS协议, ICMP协议, NAT技术. 1. IP协议: 1.1 介绍: 网际互连协议, 网络层是进行数据真正传输的一层, 进行数据从一个主机传输到另一个主机. 网络层可以将数据主机进行传送, 那么传输层保证数据可靠性, 一起就是TCP/IP协议. 路径选择: 确…

Qt基础项目篇——Qt版Word字处理软件

一、核心功能 本软件为多文档型程序,界面是标准的 Windows 主从窗口 拥有:主菜单、工具栏、文档显示区 和 状态栏。 所要实现的东西,均在下图了。 开发该软件,主要分为下面三个阶段 1)界面设计开发 多窗口 MDI 程序…

Python+langchain+通义千问qwen(大模型实现自己的聊天机器人)

Langchain langchain是一个用于开发由语言模型驱动的应用程序的框架,致力于简化AI模型应用的开发。简单来说,langchain就是一个(帮助开发者轻松完成AI模型应用开发的)框架,现在支持python和js两个版本,它集成多种大语…

FPGA中场战事

2023年10月3日,英特尔宣布由桑德拉里维拉(Sandra Rivera)担任“分拆”后独立运营的可编程事业部首席执行官。 从数据中心和人工智能(DCAI)部门总经理,转身为执掌该业务的CEO,对她取得像AMD掌门人苏姿丰博士类似的成功,无疑抱以厚望。 十年前,英特尔花费167亿美元真金白银…

【超详细】ELK实现日志采集(日志文件、springboot服务项目)进行实时日志采集上报

本文章介绍,Logstash进行自动采集服务器日志文件,并手把手教你如何在springboot项目中配置logstash进行日志自动上报与日志自定义格式输出给logstash。kibana如何进行配置索引模式,可以在kibana中看到采集到的日志 日志流程 logfile-> l…

探索Linux中的进程控制:从启动到退出的背后原理

个人主页:chian-ocean 文章专栏-Linux 前言: 进程控制是操作系统对进程的创建、运行、调度、中止等活动进行管理和协调的行为。它是操作系统中至关重要的一部分,保证多任务处理环境下的资源分配和系统稳定性。 进程创建 fork( ) fork() 调…

【ComfyUI】python调用生图API,实现批量出图

官方给的示例: https://github.com/comfyanonymous/ComfyUI/blob/master/script_examples/websockets_api_example.pyhttps://github.com/comfyanonymous/ComfyUI/blob/master/script_examples/websockets_api_example.pyhttps://github.com/comfyanonymous/ComfyU…

推箱子游戏

java小游戏2 一游戏介绍 二图像准备 墙、箱子、人、箱子目的地,人左边、人右边、人上边、人下边 三结构准备 地图是什么,我们把地图想象成一个网格,每个格子就是工人每次移动的步长,也是箱子移动的距离,设置一个二维数…

软件鉴定测试重要性和流程分享

在当今快速发展的数字时代,软件系统的可靠性和安全性变得至关重要。越来越多的企业意识到,进行专业的软件鉴定与测试不仅是保证产品质量的必要步骤,也是提升市场竞争力的重要手段。软件鉴定测试指通过对软件进行评估和验证,以确保…

Linux C\C++编程-建立文件和内存映射

【图书推荐】《Linux C与C一线开发实践(第2版)》_linux c与c一线开发实践pdf-CSDN博客 《Linux C与C一线开发实践(第2版)(Linux技术丛书)》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 Linu…

15-spring整合mybatis方式一

spring整合mybatis 方式一【重要】 步骤: 1.导入相关jar包 junit mybatis mysql数据库 spring相关的 aop织入 mybatis-spring 【new】 junit junit 4.12 mysql mysql-connector-java 8.0.23 org.mybatis mybatis 3.5.2 org.springframework spring-webmvc 5…

基于深度学习的视觉检测小项目(十五) 用户的登录界面

用户管理离不开的是消息框(QMessageBox)和对话框(QDialog),比如对话框用于用户名和密码输入,消息框用于提示登录成功、密码错误。 • 基础知识:PySide6(PyQT5)的常用对话…

什么是COLLATE排序规则?

在当今数字化世界中,数据的整理、比较和排序是至关重要的。在数据库管理和编程语言中,我们经常需要对字符串进行排序,以展示或处理信息。为了实现这一点,各种系统和工具提供了排序规则,其中COLLATE排序规则就是其中的一…

Linux:信号的保存[2]

1.信号在内核中的表示 因为是三种内核的数据结构,操作系统就可以通过操作这些数据结构提供接口。 如果一个信号没有产生,并不妨碍它可以先被阻塞。 当同一时刻发送大量相同信号时,会丢失。 2.信号的捕捉(重点) 信号产…