FastAPI 基本路由

FastAPI 基本路由

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,与 Python 3.6+ 类型提示一起使用。它是一个轻量级的框架,但功能强大,能够提供高效的开发体验和出色的性能。在本文中,我们将探讨 FastAPI 的基本路由概念,并了解如何使用它们来构建 Web 应用程序。

什么是路由?

在 Web 框架的上下文中,路由是指将传入的 HTTP 请求映射到特定处理函数的过程。每个路由都由一个 URL(路径)和一个 HTTP 方法(如 GET、POST 等)组成。当客户端向服务器发送请求时,服务器会根据请求的 URL 和 HTTP 方法来确定哪个路由应该处理该请求,并将请求转发给相应的处理函数。

FastAPI 路由的基本用法

在 FastAPI 中,路由是通过定义装饰器来创建的。装饰器是一个特殊的 Python 函数,它可以修改其他函数的行为。FastAPI 提供了一个 @app.get() 装饰器,用于处理 GET 请求,以及一个 @app.post() 装饰器,用于处理 POST 请求。你还可以使用其他 HTTP 方法,如 @app.put()@app.delete() 等。

下面是一个简单的 FastAPI 路由示例:

from fastapi import FastAPI

app = FastAPI()

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

在这个示例中,我们首先从 fastapi 包导入 FastAPI 类,然后创建一个 app 实例。接下来,我们使用 @app.get() 装饰器定义了一个路由,该路由的处理函数为 read_root。当客户端向服务器的根 URL(/)发送 GET 请求时,服务器将调用 read_root 函数,并返回一个包含 "Hello": "World" 的 JSON 响应。

路由参数

FastAPI 允许你定义路由参数,这些参数可以是路径参数、查询参数或请求体参数。路径参数是 URL 路径的一部分,而查询参数是 URL 查询字符串的一部分。请求体参数是 POST 或 PUT 请求中的 JSON 数据。

下面是一个带有路径参数的路由示例:

@app.get("/items/{item_id}")
def read_item(item_id: int):
    return {"item_id": item_id}

在这个示例中,我们定义了一个带有路径参数 item_id 的路由。当客户端向 /items/1(例如)发送 GET 请求时,服务器将调用 read_item 函数,并将 item_id 参数设置为 1。然后,函数将返回一个包含 "item_id": 1 的 JSON 响应。

总结

FastAPI 是一个现代、高效的 Web 框架,用于构建 API。它提供了一种简单、直观的方式来定义路由和处理 HTTP 请求。通过使用 FastAPI,你可以快速构建高性能的 Web 应用程序,并利用 Python 的类型提示系统来提高代码的可读性和维护性。

<think>好的,我现在需要帮助用户了解如何在FastAPI中配置路由。根据用户提供的引用内容,我需要整理出配置路由的步骤和注意事项。首先,我应该从APIRouter的基本用法开始,因为引用中提到APIRouter用于模块化路由管理。然后,我需要说明如何创建子应用的路由文件,比如app01和app02中的例子,再讲解如何将这些子路由导入到主应用main.py中,并使用include_router进行集成。 接下来,我需要覆盖路由的各个配置项,比如前缀、标签和依赖项,这些在引用[4]和[2]里有提到。此外,用户可能想知道不同的HTTP方法如何设置,引用[5]提到了GET、POST等,应该举例说明不同方法的用法。另外,路径参数和文件上传也是FastAPI的重要特性,引用[3]中有相关例子,需要包含这部分内容。 同时,我需要确保回答结构清晰,分步骤说明,并给出代码示例,这样用户更容易理解。可能还需要提到中间件或自定义路由类的可能性,引用[2]里提到了方法重写,虽然用户的问题主要是配置路由,但可以简要提及高级用法作为扩展。 最后,生成相关问题时要覆盖用户可能进一步关心的点,比如性能优化、路由冲突解决、动态路径参数等。需要检查是否所有引用内容都被合理利用,并且回答符合用户的要求,使用中文,LaTeX格式正确,没有使用markdown,代码块用三个反引号包裹。</think>在FastAPI中配置路由主要通过`APIRouter`和`include_router`实现模块化管理,以下是具体步骤和配置方法: --- ### 一、基础路由配置 1. **创建独立路由文件** 在子应用目录(如`app01/urls.py`)中使用`APIRouter`实例定义路由: ```python from fastapi import APIRouter router = APIRouter() # 创建路由器实例 @router.get("/food") async def get_food(): return {"food": "食品信息"} @router.post("/bed") async def create_bed(): return {"bed": "床品信息"} ``` 2. **主应用集成子路由** 通过`include_router`将子路由挂载到主应用: ```python from fastapi import FastAPI from app01.urls import router as app01_router app = FastAPI() app.include_router(app01_router, prefix="/api/v1") # 添加前缀/api/v1 ``` 最终路径:`/api/v1/food`[^4] --- ### 二、路由配置进阶选项 | 配置项 | 作用 | 示例代码 | |--------------|-------------------------------|-----------------------------------| | `prefix` | 统一添加路径前缀 | `include_router(router, prefix="/shop")`[^4] | | `tags` | 在Swagger文档中分组路由 | `APIRouter(tags=["用户模块"])` | | `dependencies`| 为路由组添加全局依赖(如鉴权)| `APIRouter(dependencies=[Depends(verify_token)])`[^2] | | `response_class` | 指定默认响应类型 | `APIRouter(response_class=HTMLResponse)` | --- ### 三、特殊路由类型 1. **路径参数路由** 使用动态参数捕获URL中的值: ```python @router.get("/users/{user_id}") async def read_user(user_id: int): return {"user_id": user_id} ``` 支持类型校验,如`user_id: int`会自动验证是否为整数[^3]。 2. **文件上传路由** 需声明`File`和`UploadFile`: ```python from fastapi import UploadFile, File @router.post("/upload") async def upload_file(file: UploadFile = File(...)): return {"filename": file.filename} ``` 支持多文件上传和元数据配置[^3]。 --- ### 四、路由冲突解决 FastAPI按以下优先级匹配路径: 1. 固定路径(如`/users/me`) 2. 带参数路径(如`/users/{user_id}`) 例如: ```python @router.get("/users/me") async def read_current_user(): return {"msg": "当前用户"} @router.get("/users/{user_id}") async def read_user(user_id: int): return {"user_id": user_id} ``` 访问`/users/me`会优先匹配第一个路由[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值