FastAPI 教程

5.6 全局依赖与路径操作依赖

FastAPI入门教程:Python初学者快速上手指南

FastAPI 教程

这篇FastAPI入门教程专为有Python基础的初学者设计,通过生活化类比和动手实践,快速掌握FastAPI核心概念,包括全局依赖与路径操作依赖,建立Web开发信心。

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

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

了解更多

FastAPI入门教程:Python初学者快速上手指南

介绍

嗨!欢迎来到FastAPI的世界!如果你已经掌握了Python的基础语法,但从未接触过Web开发,别担心,FastAPI将是你完美的入门选择。FastAPI是一个现代、快速(高性能)的Python Web框架,用于构建API。它就像你第一次学骑自行车,有辅助轮一样——简单易上手,却功能强大。

在本教程中,我们会通过大量简单示例,让你一步步体验“成功时刻”,用类比来理解抽象概念,最终自信地构建自己的Web应用。

为什么选择FastAPI?

想象一下,你开了一家餐厅(你的Web应用)。顾客(客户端)通过菜单(API)点餐,厨房(后端服务器)准备食物并上菜。FastAPI就是这个高效的厨房系统,它能自动生成菜单文档,处理订单飞快,并且易于维护。对于初学者来说,它语法简洁,文档清晰,让你专注于学习而非复杂的配置。

安装FastAPI

首先,确保你安装了Python(建议3.7以上版本)。打开命令行(终端),运行以下命令来安装FastAPI和服务器工具:

pip install fastapi uvicorn

安装完成了吗?太棒了!第一个“成功时刻”达成。

你的第一个FastAPI应用

让我们创建一个最简单的FastAPI应用,看看它如何工作。新建一个Python文件,比如main.py,并输入以下代码:

from fastapi import FastAPI

app = FastAPI()  # 创建FastAPI应用,就像给你的餐厅起名

@app.get("/")  # 定义一个路径操作:当有人访问首页时
async def read_root():
    return {"message": "Hello, World!"}  # 返回一个JSON响应

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

uvicorn main:app --reload

打开浏览器,访问 http://127.0.0.1:8000/,你会看到 {"message": "Hello, World!"}。哇,你的第一个API运行起来了!这是一个简单的路径操作,它处理GET请求。路径操作就像餐厅的点单流程:顾客访问某个URL(路径),服务器响应相应内容。

理解路径操作:类比餐厅点单

在FastAPI中,路径操作是用来定义当客户端(如浏览器或另一个应用)请求特定URL时,服务器应该做什么。

  • 路径:如 /items/1,就像餐厅的菜单项“汉堡”。
  • 操作:GET、POST、PUT、DELETE,对应顾客的点餐(获取菜单)、下单(添加新订单)、修改订单、取消订单。

让我们扩展例子,添加一个路径操作来获取项目列表:

from fastapi import FastAPI

app = FastAPI()

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

@app.get("/items/")
async def read_items():
    return [{"item": "Book"}, {"item": "Pen"}]  # 返回一个项目列表

运行应用,访问 http://127.0.0.1:8000/items/,你会看到列表。是不是很简单?现在你正在处理多个路径操作。

依赖注入:让代码更整洁

依赖注入是FastAPI的一个强大功能,它帮助你管理代码中的重复部分。想象一下,你在餐厅每次做菜都需要去仓库拿盐,这很麻烦。依赖注入就像是让厨房助手自动准备好配料,你只需专注于烹饪。

在FastAPI中,依赖分为全局依赖和路径操作依赖:

  • 全局依赖:应用于整个应用,比如验证所有请求的认证信息。
  • 路径操作依赖:只应用于特定的路径操作,比如为某个菜单项添加特殊调料。

示例:路径操作依赖

假设我们想为某些路径操作添加一个“欢迎消息”依赖。创建一个依赖函数:

from fastapi import FastAPI, Depends

app = FastAPI()

async def common_parameters(q: str = None, skip: int = 0, limit: int = 10):
    return {"q": q, "skip": skip, "limit": limit}  # 这个函数返回一些通用参数

@app.get("/items/")
async def read_items(commons: dict = Depends(common_parameters)):
    # 使用依赖:common_parameters 自动被调用并提供参数
    return {"items": ["item1", "item2"], "params": commons}

@app.get("/users/")
async def read_users(commons: dict = Depends(common_parameters)):
    return {"users": ["user1", "user2"], "params": commons}

访问 http://127.0.0.1:8000/items/?q=test&skip=5,你会看到参数被正确处理。依赖注入让代码可重用且易于维护。

示例:全局依赖

要添加全局依赖,比如验证每个请求的用户,我们可以这样做:

from fastapi import FastAPI, Depends, Header, HTTPException

async def verify_token(x_token: str = Header(None)):
    if x_token != "fake-super-secret-token":
        raise HTTPException(status_code=400, detail="Invalid token")
    return x_token

app = FastAPI(dependencies=[Depends(verify_token)])  # 将依赖添加到全局

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

现在,每个请求都需要在头部包含 X-Token: fake-super-secret-token,否则会返回错误。运行应用并测试:不带token访问会失败,带上token就能成功。这展示了全局依赖如何保护整个应用。

动手实践:构建一个小型API

让我们把所学知识结合起来,创建一个简单的图书管理API。它会使用路径操作和依赖。

from fastapi import FastAPI, Depends, HTTPException
from pydantic import BaseModel
from typing import List

app = FastAPI()

# 定义数据模型:用Pydantic来验证数据,就像餐厅的菜单标准
class Book(BaseModel):
    id: int
    title: str
    author: str

# 模拟数据库:用一个列表存储书籍
fake_db = [
    Book(id=1, title="Python入门", author="张三"),
    Book(id=2, title="FastAPI指南", author="李四"),
]

# 依赖:验证书籍ID是否存在
async def get_book_by_id(book_id: int):
    for book in fake_db:
        if book.id == book_id:
            return book
    raise HTTPException(status_code=404, detail="Book not found")

# 路径操作
@app.get("/books/", response_model=List[Book])
async def read_books():
    return fake_db  # 获取所有书籍

@app.get("/books/{book_id}", response_model=Book)
async def read_book(book: Book = Depends(get_book_by_id)):
    return book  # 使用依赖来获取特定书籍

@app.post("/books/", response_model=Book)
async def create_book(book: Book):
    fake_db.append(book)
    return book  # 创建新书籍

运行应用,你可以:

  • 访问 http://127.0.0.1:8000/books/ 获取所有书籍列表。
  • 访问 http://127.0.0.1:8000/books/1 获取ID为1的书籍(依赖确保书籍存在)。
  • 使用工具如curl或Postman发送POST请求到 http://127.0.0.1:8000/books/ 创建新书籍(需要发送JSON数据)。

试试吧!每个操作都会给你即时反馈,建立你的信心。

总结和下一步

恭喜你!你已经掌握了FastAPI的基础:创建应用、定义路径操作、使用依赖注入(包括全局和路径操作依赖)。通过类比餐厅,希望这些概念变得生动易懂。

下一步建议:

  • 探索FastAPI的自动文档:访问 http://127.0.0.1:8000/docs 查看交互式API文档。
  • 学习更多高级功能,如数据库集成、错误处理等。
  • 实践构建一个完整项目,比如待办事项API。

记住,Web开发就像学新技能——多加练习,你会越来越熟练。FastAPI社区活跃,文档丰富,随时可以寻求帮助。现在,去创造你的第一个Web应用吧!

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

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

获取工具包