FastAPI 教程

8.1 中间件概念与执行流程

Python FastAPI入门教程:从零开始学习Web开发与中间件

FastAPI 教程

一个面向初学者的详细FastAPI教程,涵盖基础概念、快速上手、中间件与执行流程,通过生活化类比和简单示例帮助您建立信心,无Web开发经验也能轻松学习。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

Python FastAPI入门教程:从零开始学习Web开发

欢迎来到FastAPI的奇妙世界!如果您有基础的Python语法知识,但对Web开发一无所知,别担心——本教程将带您一步步掌握FastAPI,通过简单的示例和有趣的类比,让您快速体验成功的喜悦。

什么是FastAPI?

FastAPI是一个现代、快速的Web框架,用于构建API(应用程序接口)。想象一下,API就像一个餐厅的服务员:您点菜(发送请求),服务员接收并告诉厨房(处理请求),然后将美食端上桌(返回响应)。FastAPI能帮您轻松打造这样的“餐厅”,让您的应用与外界交互。

环境设置:准备您的“厨房”

在开始之前,我们需要安装必要的工具。请确保您已安装Python(建议版本3.7+),然后打开终端或命令行,运行以下命令:

pip install fastapi
pip install uvicorn

fastapi是框架本身,uvicorn是服务器,就像厨房里的炉灶,帮助我们运行应用。

第一个API:打造您的“菜单”

现在,让我们创建一个简单的API,体验一下成功的瞬间!创建一个新文件,命名为main.py,并输入以下代码:

from fastapi import FastAPI

app = FastAPI()  # 创建一个FastAPI应用,这就像开设一家新餐厅

@app.get("/hello")  # 定义一个菜单项,当用户访问/hello时,提供服务
def hello_world():
    return {"message": "Hello, World!"}  # 返回响应,就像端出一盘菜

保存文件,然后在命令行运行:

uvicorn main:app --reload

打开浏览器,访问 http://127.0.0.1:8000/hello,您会看到 {"message": "Hello, World!"} 显示在页面上——恭喜!您已经成功创建了第一个API!这就是FastAPI的魅力,简单几步就能让您看到成果。

基本路由和请求方法:丰富您的“菜单”

在餐厅里,您可能想吃不同的菜,对应不同的请求方法。让我们扩展一下:

@app.get("/items/{item_id}")  # 处理GET请求,比如访问/items/1
def read_item(item_id: int):  # 使用类型提示,自动验证输入
    return {"item_id": item_id, "description": "This is an item"}

@app.post("/items/")  # 处理POST请求,用于添加新菜品
def create_item(name: str):
    return {"name": name, "status": "created"}

再次运行应用,您可以在浏览器或工具如Postman中测试这些端点。例如,访问 http://127.0.0.1:8000/items/5,您会看到响应包含数字5。

中间件概念与执行流程:餐厅里的“服务台”

现在,我们来学习中间件——这是Web开发中的重要概念。想象一下,在餐厅里,顾客点餐后,食物上桌前,可能有一些额外步骤:比如服务员记录订单时间、检查顾客是否已付订金,或者给食物拍照。中间件就是这些步骤,它在请求和响应的过程中插入处理逻辑。

什么是中间件?

中间件是代码块,它在每个请求到达路由处理前,以及每个响应返回前执行。它就像一个“服务台”,处理杂务,让主逻辑更专注。

执行流程:顾客的用餐之旅

让我们用餐厅类比来解释执行流程:

  1. 请求进入:顾客(客户端)发送请求到餐厅(服务器)。
  2. 中间件处理:服务台(中间件)先接待顾客,可能记录时间、验证身份——这是请求阶段。
  3. 路由处理:服务员(路由函数)根据点菜单(请求路径和方法)准备菜品(处理业务逻辑)。
  4. 响应返回:服务员将菜品端上桌。
  5. 中间件处理:服务台在食物上桌前可能再做一些事,比如添加收据——这是响应阶段。

动手实践:添加一个简单的中间件

让我们在FastAPI中添加一个中间件,来记录每个请求的路径。在main.py中,添加以下代码:

from fastapi import FastAPI, Request
import time

app = FastAPI()

# 定义一个中间件函数
@app.middleware("http")  # 告诉FastAPI这是一个HTTP中间件
async def log_requests(request: Request, call_next):
    # 请求阶段:记录路径
    start_time = time.time()
    print(f"Received request to {request.url.path}")
    
    # 调用下一个处理(可能是路由或其他中间件)
    response = await call_next(request)
    
    # 响应阶段:记录处理时间
    process_time = time.time() - start_time
    print(f"Request to {request.url.path} took {process_time:.2f} seconds")
    return response

# 保持之前的路由
@app.get("/hello")
def hello_world():
    return {"message": "Hello, World!"}

现在,重新运行应用(uvicorn main:app --reload),访问 http://127.0.0.1:8000/hello。查看命令行输出,您会看到类似这样的消息:

Received request to /hello
Request to /hello took 0.01 seconds

太棒了!您已经成功添加了一个中间件,它像服务台一样记录了每个请求的细节。这就是中间件的魔力——它可以轻松扩展功能,而不影响主代码。

更多实践示例:巩固您的技能

为了让您更有信心,这里有一些额外的快速示例:

示例1:添加数据验证

FastAPI使用Pydantic自动验证数据。例如,创建一个包含验证的POST请求:

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float

@app.post("/create-item/")
def create_item(item: Item):  # FastAPI自动验证item数据
    return {"item": item.dict(), "status": "created"}

测试时,发送一个JSON请求,如 {"name": "Apple", "price": 1.99},您会得到验证响应。

示例2:模拟数据库操作

简单模拟数据库交互:

fake_db = []

@app.get("/items/")
def get_items():
    return {"items": fake_db}

@app.post("/add-item/")
def add_item(item: Item):
    fake_db.append(item.dict())
    return {"message": "Item added", "items": fake_db}

访问这些端点,您可以练习增删改查操作。

总结:您已经迈出了第一步!

通过本教程,您学习了FastAPI的基础:从安装、创建第一个API,到理解中间件概念与执行流程。记住,Web开发就像经营餐厅——路由是菜单,中间件是服务台,而您就是主厨!继续练习,尝试构建更复杂的API,FastAPI的文档和支持社区会帮助您成长。

下一步建议

  • 阅读FastAPI官方文档以了解更多高级功能。
  • 尝试集成数据库如SQLite或PostgreSQL。
  • 探索认证、错误处理等主题。

祝您编程愉快,快速成为Web开发高手!

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包