day0.5 fastapi项目及路径参数
一、FastAPI 项目认识1. 创建main.py文件FastAPI 项目的核心入口文件是main.py我们在这里创建应用实例并定义路由python运行# 步骤1: 从 fastapi 包中导入 FastAPI 类 # FastAPI 是一个类我们用它来创建 Web 应用的核心对象 from fastapi import FastAPI # 步骤2: 创建 FastAPI 类的实例 # 这个 app 对象就是整个 Web 应用后续所有的路由、配置都挂载在它上面 # 括号里的参数是可选的用于给自动生成的 API 文档添加标题、描述和版本号 app FastAPI( title我的 FastAPI 应用, # 文档标题 descriptionDay01 入门示例, # 文档描述 version0.1.0 # 应用版本 ) # 步骤3: 定义路由 —— 告诉服务器“当有人访问某个 URL 时执行哪个函数” # app.get(/) 是一个装饰器 (Decorator) # 它表示: 当客户端使用 GET 方法访问根路径 / 时触发下面这个函数 app.get(/) async def read_root(): 这是一个异步的视图函数也叫路径操作函数。 为什么要用 async def? - 因为 Web 服务经常需要等待数据库查询、网络请求等 I/O 操作。 - 使用异步函数可以让服务器在等待期间去处理其他请求提高并发能力。 返回值: - 直接返回一个 Python 字典FastAPI 会自动把它转换成 JSON 格式的字符串 并返回给客户端。 return {message: Hello World}2. 启动服务器在终端中执行以下命令来启动开发服务器bash运行uvicorn main:app --reload或者指定主机和端口bash运行uvicorn main:app --host 127.0.0.1 --port 8000 --reload命令详解uvicornASGI 服务器程序专门用于运行异步 Web 应用。main:appmain指的是main.py文件名app指的是文件里app FastAPI()的变量名中间用冒号分隔。--reload开启热重载模式。当你修改代码并保存后服务器会自动重启开发时必须加上。启动成功后访问http://127.0.0.1:8000即可看到返回的 JSON 数据同时可以访问http://127.0.0.1:8000/docs查看自动生成的交互式 API 文档。二、路径参数Path Parameters1. 什么是路径参数路径参数是 URL 路径中的动态可变部分格式为{参数名}用于标识「具体的资源」如物品 ID、用户 ID。示例/items/11是路径参数item_id的值/users/100100是路径参数user_id的值FastAPI 会自动提取路径中的对应值并传递给路由处理函数。2. 路径参数的类型注解FastAPI 支持所有 Python 原生类型作为路径参数的注解会自动进行类型校验和转换。python运行# 1. 字符串类型 (默认可省略str注解) app.get(/users/{username}, summary字符串路径参数) def read_user(username: str): # str注解可省略默认按字符串处理 return {username: username} # 2. 布尔类型 (自动解析true/false为布尔值) app.get(/status/{is_active}, summary布尔路径参数) def check_status(is_active: bool): return {is_active: is_active, type: type(is_active).__name__} # 3. 浮点数类型 app.get(/price/{amount}, summary浮点路径参数) def get_price(amount: float): return {amount: amount, type: type(amount).__name__}测试不同类型参数访问/users/张三→ 字符串类型正常返回访问/status/true→ 自动转为bool: True访问/price/9.9→ 浮点类型正常返回访问/price/abc→ 自动返回类型校验错误3. 高级用法数值范围校验使用Path类基础类型注解只能校验类型无法限制数值范围如物品 ID 必须 ≥1。FastAPI 提供Path类支持更精细的校验规则。python运行from fastapi import Path # 导入Path类 app.get(/items/{item_id}) def read_item( # Path类参数: ge(≥)、le(≤)、gt()、lt()、title、description等 item_id: int Path( ge1, # 必须大于等于1 le100, # 必须小于等于100 title物品ID, # 参数标题显示在文档中 description物品的唯一标识范围1-100, # 参数描述 aliasitem-id # 参数别名文档中显示的名称 ) ): return {item_id: item_id}4. 路径参数包含斜杠/默认情况下路径参数会被/分割。若需要路径参数包含/如/files/home/user/doc.txt需使用「路径转换器」pathpython运行# 包含斜杠的路径参数 app.get(/files/{file_path:path}, summary包含斜杠的路径参数) def read_file(file_path: str): 路径参数包含斜杠示例: 使用:path转换器 示例访问: /files/home/user/doc.txt - file_path home/user/doc.txt return {file_path: file_path, message: 文件路径接收成功}测试效果访问/files/home/user/doc.txt→file_path: home/user/doc.txt访问/files/data/report/2025.pdf→file_path: data/report/2025.pdf三、完整代码示例python运行from fastapi import FastAPI, Path from enum import Enum # 导入Python内置枚举类 # 创建一个FastAPI实例用来处理HTTP请求 # 创建实例可以传参数来对开发文档进行描述 app FastAPI( titlefirst开发文档, description文档描述, summary文档总结, version0.1, ) # 用装饰器创建一个路由定义请求方式以及请求路径 # 必须用app创建因为是FastAPI实例是app app.get(/) async def root(): return {message: Hello World} # 也可以对异步函数进行描述 # summary在外面显示 description在里面显示 app.get(path: /temp, summary第一个异步函数, description异步函数) async def temp(): return {message: 第一个异步函数} # 动态路由其中name是路径参数这里充当于函数的实参 app.get(/hello/{name}) # 定义路径参数一般要定义参数类型。这里充当于函数的形参 async def say_hello(name: str 张三): return {message: fHello {name}} # 路径参数会被/分割若想为一个整体则需要路径转换器:path # 示例: /file/home/user/doc.txt - file_path home/user/doc.txt app.get(path: /file/{file_path:path}, summary有/的路径参数) async def read_file(file_path: str): return {msg:f文件路径为: {file_path}} # 当对路径参数有限制时可以使用Path类来实现 # Path类有很多参数 app.get(path: /user/{name}/{age}, summary用户信息总结) async def user_info(name: strPath(min_length3,max_length5), age: int Path(description年龄,le20,gt18)): return {msg:f名称为: {name}年龄为: {age}}四、今日学习总结项目初始化掌握了main.py的创建、FastAPI实例化及核心配置。服务启动学会了使用uvicorn命令启动开发服务器并理解了--reload等关键参数。基础路由编写了第一个GET接口了解了异步函数async def的优势。路径参数基础用法动态 URL 与类型注解。类型校验自动处理字符串、布尔、浮点等类型。高级校验使用Path类实现数值范围、长度限制等。特殊场景使用path转换器处理包含斜杠的路径参数。