FastAPI 教程

12.5 依赖项覆盖与模拟

FastAPI入门教程:Python初学者快速上手Web开发

FastAPI 教程

本教程专为有Python语法基础、无Web开发经验的初学者设计。通过生活化类比、大量简单示例和逐步实践,教你使用FastAPI快速构建Web API,轻松掌握依赖项和模拟概念,建立Web开发信心。

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

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

了解更多

FastAPI入门教程:Python初学者的Web开发之旅

为什么选择FastAPI? – 像点餐一样简单

想象一下,你去一家餐厅点餐:服务员(Web服务器)接收你的订单(请求),然后从厨房(后端代码)准备食物(响应),最后送回来给你。FastAPI就像是这个服务生的超级版本——它快速、直观,而且能自动帮你处理很多细节!对于Python初学者来说,它是一个完美的起点,因为代码简洁,文档友好,能让你在几分钟内就体验到“成功时刻”。

第一步:安装FastAPI和Uvicorn

要开始,你只需要Python 3.7或更高版本。打开终端(比如命令提示符或PowerShell),运行以下命令安装FastAPI和一个服务器Uvicorn:

pip install fastapi uvicorn

成功时刻: 安装完成后,你会看到类似“Successfully installed fastapi-...”的输出——恭喜,你已经准备好出发了!

第二个成功时刻:创建你的第一个FastAPI应用

现在,让我们创建一个最简单的应用。在你的Python代码编辑器中(比如VS Code或IDLE),新建一个文件 main.py,并输入以下代码:

# main.py
from fastapi import FastAPI

app = FastAPI()  # 创建一个FastAPI应用实例,就像是开了一家新餐厅

@app.get("/")  # 定义一个GET端点,当用户访问根路径时触发
async def read_root():
    return {"message": "Hello, FastAPI World!"}

保存文件。然后回到终端,导航到文件所在目录,运行:

uvicorn main:app --reload

成功时刻: 你会看到输出提示服务器已启动,比如“Uvicorn running on http://127.0.0.1:8000”。打开浏览器,访问 http://127.0.0.1:8000,你应该立即看到 {"message": "Hello, FastAPI World!"} 显示!这就是你的第一个Web API在运行——是不是很简单?

第三个成功时刻:添加路由和端点

现在,让我们添加更多“菜单项”。在 main.py 中添加新代码:

@app.get("/items/{item_id}")  # 路径参数,像是一个特定的菜单编号
async def read_item(item_id: int):
    return {"item_id": item_id, "description": "这是一个示例物品"}

@app.get("/users/")  # 查询参数,比如添加过滤条件
async def read_user(name: str = "Guest"):  # 如果没有提供name,默认是"Guest"
    return {"user": name, "welcome": "欢迎访问!"}

重启服务器(如果自动重载没触发,按Ctrl+C停止,再运行 uvicorn main:app --reload)。然后,在浏览器中试试:

  • 访问 http://127.0.0.1:8000/items/42,你会看到 {"item_id": 42, "description": "这是一个示例物品"}
  • 访问 http://127.0.0.1:8000/users/?name=张三,你会看到 {"user": "张三", "welcome": "欢迎访问!"}

成功时刻: 你已经创建了动态端点,可以处理不同输入——这就像在餐厅点特定菜名或加备注一样方便!

理解请求和响应

FastAPI使用Pydantic模型来自动验证数据,但作为初学者,我们先用简单方式。类比一下:请求是客人点的菜单,响应是厨房送出的美食。代码中,你直接返回Python字典,FastAPI会自动转换成JSON格式。

依赖项:让代码更干净 – 像共享工具库

依赖项是FastAPI的酷炫特性,它让你可以重用代码,比如检查用户权限或共享数据库连接。想象一下,所有厨师(函数)都需要同一个工具(比如菜刀),而不是每人带一把。这里是一个简单示例:

main.py 中添加:

from fastapi import Depends

# 定义一个依赖项函数,就像是餐厅的通用工具
def common_query_params(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_query_params)):  # 使用依赖项
    # commons现在是一个字典,包含查询参数
    return {"filters": commons, "items": ["item1", "item2", "item3"]}

访问 http://127.0.0.1:8000/items/?q=fastapi&skip=5,你会看到 {"filters": {"q": "fastapi", "skip": 5, "limit": 10}, "items": ["item1", "item2", "item3"]}

成功时刻: 依赖项让代码更模块化,减少重复——你已经掌握了如何共享参数!

模拟和覆盖:处理数据和测试

在Web开发中,经常需要模拟数据(比如测试时)或覆盖依赖项(比如替换为测试版本)。对于初学者,我们从简单模拟开始:

假设你想在端点中返回模拟数据,而不是真实数据库。在 main.py 中添加:

# 模拟一个数据源,像是餐厅的示例菜单
def get_mock_items():
    return [
        {"id": 1, "name": "模拟物品A", "price": 10},
        {"id": 2, "name": "模拟物品B", "price": 20}
    ]

@app.get("/mock-items/")
async def read_mock_items():
    items = get_mock_items()  # 调用模拟函数
    return {"items": items}

访问 http://127.0.0.1:8000/mock-items/,你会看到模拟的物品列表。这让你在开发初期快速测试,而不用连接真实数据库。

覆盖依赖项: 如果你在测试中想替换依赖项,FastAPI支持覆盖,但作为入门,我们先理解概念。类比一下:在训练厨师时,你可以用模拟食材(覆盖)来练习,而不是用真实的。

总结和下一步

恭喜!你已经学会了FastAPI的基础:创建应用、添加路由、使用参数、依赖项和模拟数据。记住关键点:

  • 动手实践: 多写代码,多运行看看效果。
  • 生活化类比: 将Web开发想象成餐厅服务,这样更容易理解。
  • 建立信心: 每个示例都设计成能立即看到成功——你已经做到了!

下一步建议: 探索FastAPI的自动文档(访问 http://127.0.0.1:8000/docs 试试!),学习更多高级特性如Pydantic模型或数据库集成。

故障排除: 如果遇到错误,检查代码缩进、确保服务器运行,或者在网上搜索错误信息——FastAPI社区很友好!

Happy coding,继续你的Web开发之旅!

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

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

获取工具包