快速掌握FastAPI:高效构建Web API

快速掌握FastAPI:高效构建Web API

FastAPI 简介

  • FastAPI 是一个基于 Python 的高性能 Web 框架,专门用于快速构建 API 接口服务

FastAPI 框架基础

使用 FastAPI 框架搭建 Web 服务

1. 创建项目

2. 运行项目

run运行

uvicorn main:app --reload  终端运行

--reload:更改代码后自动重启服务器

3. 访问项目

访问 FastAPI 交互式文档:

路由

路由: URL 地址和处理函数之间的映射关系,它决定了当用户访问某个特定网址时,服务器应该执行哪段代码来返回结果示例:

@app.get("/") async def root(): return {"message": "Hello World666"} @app.post("/add_book") async def add_book(book: Book): return book

参数

 同一段接口逻辑,根据参数不同返回不同的数据

参数就是客户端发送请求时附带的额外信息和指令参数的作用是让同一个接口能根据不同的输入,返回不同的输出,实现动态交互

路径参数

URL 路径设置参数
@app.get("/user/{id}") async def get_user(id: int): return {"id": id, "titleName": f"这是用户{id}"}
路径参数 - 类型注解 Path

FastAPI 允许为参数声明额外的信息和校验

Path 参数
说明
...必填
gt/ge
大于/大于等于
lt/le
小于/小于等于
description
描述
min_length
max_length
长度限制

from fastapi import FastAPI, Path @app.get("/newsClassificationId/{id}") async def get_news_classification_id(id: int = Path(..., ge=1, le=100, description="新闻分类id")): return {"id": id, "titleName": f"新闻分类id为{id}"}

查询参数

声明的参数不是路径参数时,路径操作函数会把该参数自动解释为查询参数

@app.get("/news/news_list") async def get_news_list(skip: int, limit: int=10): return {"skip": skip, "limit": limit}
查询参数 - 类型注解 Query
Query 参数
说明
...必填
gt/ge
大于/大于等于
lt/le
小于/小于等于
description
描述
min_length
max_length
长度限制
from fastapi import FastAPI, Path, Query @app.get("/book/query_list") async def get_query_book_list( type: str = Query("Python开发", min_length=5, max_length=255, description="图书分类名称"), price: int = Query(..., ge=50, le=100, description="图书价格"), ): return {"type": f"图书分类名称为{type}", "price": f"价格为{price}"}

请求体参数

HTTP 请求的消息体 (body)中

在HTTP协议中,一个完整的请求由三部分组成:① 请求行:包含方法、URL、协议版本② 请求头:元数据信息(Content-Type、Authorization等)③ 请求体:实际要发送的数据内容

from pydantic import BaseModel class Book(BaseModel): bookTitle: str author: str publishingHouse: str price: int @app.post("/add_book") async def add_book(book: Book): return book
请求体参数 - 类型注解 Field
Field 参数
说明
...必填
gt/ge
大于/大于等于
lt/le
小于/小于等于
description
描述
min_length
max_length
长度限制
以图书信息为请求体参数设计URL,要求响应结果包含图书名称、作者、出版社、价格,并且图书名称、作者、价格长度范围2-20、2-10、0-100内 # 新增图书 from pydantic import BaseModel,Field class Book2(BaseModel): bookTitle: str = Field(..., min_length=2, max_length=20, description="书名") author: str = Field(min_length=2, max_length=10, description="作者") publishingHouse: str = Field(default="星空椰出版社", description="出版社") price: int = Field(..., gt=0, description="价格") @app.post("/add_book2") async def add_book(book: Book2): return book

请求与响应

响应类型

响应类型
用途
示例
JSONResponse
默认响应,返回JSON数据
return {"key": "value"}
HTMLResponse
返回HTML内容
return HTMLResponse(content)
PlainTextResponse
返回纯文本
return PlainTextResponse("text")
FileResponse
返回文件下载
return FileResponse(path)
StreamingResponse
流式响应
生成器函数返回数据
RedirectResponse
重定向
return RedirectResponse(url)

响应类型设置方式

装饰器中指定响应类一般用于固定返回类型(HTML、纯文本等)

from starlette.responses import HTMLResponse @app.get("/html", response_class=HTMLResponse) async def get_html(): return "<h1>这是一级标题</h1>"

返回响应对象用于文件下载、图片、流式响应

from fastapi.responses import FileResponse @app.get("/file") async def get_file(): file_path = "./files/1.jpeg" return FileResponse(file_path)

自定义响应数据格式

response_model 是路径操作装饰器(如 @app.get或 @app.post)的关键参数,它通过一个 Pydantic 模型来严格定义和约束 API 端点的输出格式。

from pydantic import BaseModel class News(BaseModel): id: int title: str content: str @app.get("/news/{id}", response_model=News) async def get_news(id: int): return { "id": id, "title": f"这是第{id}本书", "content": "这是一本好书" }

异常处理

操作接口出现异常,应使用 fastapi.HTTPException 来中断正常处理流程, 并返回标准错误响应

from fastapi import FastAPI, HTTPException @app.get('/news/{id}') async def get_news(id: int): id_list = [1, 2, 3, 4, 5, 6] if id not in id_list: raise HTTPException(status_code=404, detail="当前id不存在") return {"id": id}

Read more

MinIO 新版本 Docker 部署指南:告别 Web 控制台,拥抱 CLI 管理

MinIO 新版本 Docker 部署指南:告别 Web 控制台,拥抱 CLI 管理

一、背景 * 安全事件:MinIO 安全漏洞(CVE-2025-62506), 漏洞说明: https://avd.aliyun.com/detail?id=AVD-2025-62506 * 建议升级到 RELEASE.2025-10-15T17-29-55Z 或更高版本。 二、新版本变动 * Web 控制台功能阉割: * 开源社区版本,内置 Web 管理界面不再提供除了创建bucket以外的功能。👆上面的图是不是很干净😄 * 官方不再提供Docker镜像与预编译二进制,需要自行从源码编译并封装镜像。 * 推荐部署路径:源码构建 + 自制 Docker 镜像 + Docker Compose 编排。 * issues: https://github.com/minio/minio/issues/21647 开源社区版本分发调整: 三、自己动手封装镜像 * 实现方式:多阶段构建,

华为交换机首次开局配置完整步骤(Console + Web)

华为交换机首次开局配置完整步骤(Console + Web)

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 新到一台华为交换机(如S5735-L、S6730等),通电后指示灯闪烁,但无法管理、不能上网 ——这是所有网工都会经历的“裸机时刻”,别慌!首次开局只需5步: 从Console线连接,到设置IP、开启Web网管,今天就来讲讲零基础、可操作、带命令的完整流程,助你10分钟内让交换机“活”起来。 一、准备工作 所需工具: 💡 提示:华为交换机出厂默认无IP、无密码、Console口可用。 二、第1步:通过Console连接交换机 1.1 物理连接 * 将Console线一端插入交换机 Console口(通常标有“CON”) * 另一端插入电脑USB口 1.2 终端软件设置(以SecureCRT为例) * 协议:Serial * 波特率:9600

【网安毕设参考】基于机器学习算法的web入侵检测系统设计与实现

【网安毕设参考】基于机器学习算法的web入侵检测系统设计与实现

Web 入侵检测系统(web_IDS) 全套资料包含:全套源码+详细注释+开发文档+部署教程说明+售后答疑,如需要请私信博主,伸手党勿扰 概述 本文介绍了一套基于机器学习的Web入侵检测系统(web_IDS),采用随机森林和XGBoost算法对HTTP请求进行分析检测。系统实现了从数据预处理、特征提取到模型训练、评估和检测的完整流程,准确率达85%+。通过PyQt5构建的GUI界面支持参数配置、结果可视化和阈值调节,提升了系统的可用性。关键技术包括:多维特征提取(请求方法、URL参数等)、概率阈值决策机制和模块化架构设计。实验证明该系统能有效识别SQL注入、XSS等攻击,同时具备良好的扩展性,可为Web安全防护提供实用解决方案。 一、项目背景与研究意义 随着 Web 技术的快速发展,Web 应用系统在政务、金融、电商等领域得到广泛应用,其安全性问题日益突出。SQL 注入(SQL Injection)、跨站脚本攻击(XSS)等