FastAPI 教程

5.5 依赖项中的子依赖

FastAPI入门教程:Python初学者零基础Web开发,轻松掌握依赖项与子依赖

FastAPI 教程

面向Python初学者的详细FastAPI入门教程,无Web开发经验也能快速上手。通过生活化类比解释依赖项和子依赖等核心概念,包含大量动手实践示例,帮助你在每一步获得成功感,轻松构建第一个Web应用。

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

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

了解更多

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

欢迎来到FastAPI世界!

如果你已经学会了Python的基础语法,想尝试Web开发但不知道从何开始,那么你来对地方了!FastAPI是一个现代、快速的Web框架,特别适合初学者。它的语法简单,就像写普通Python函数一样,让你快速体验到Web开发的乐趣。

想象一下,Web应用就像一家餐厅:顾客(客户端)点菜(发送请求),厨房(服务器)处理并上菜(返回响应)。FastAPI就是你的厨房,帮你高效处理订单。

第一步:安装和设置

在开始之前,你需要安装FastAPI和一个服务器。使用pip命令,就像安装其他Python包一样简单。

动手实践:

  1. 打开命令行终端(如Windows的CMD或Mac的终端)。
  2. 运行以下命令安装FastAPI和Uvicorn(一个快速的ASGI服务器):
    pip install fastapi uvicorn
    
    成功时刻:看到安装完成的消息,你就有了搭建Web应用的工具箱!

第二步:创建你的第一个API(Hello World)

现在,让我们创建一个最简单的Web应用。创建一个Python文件,比如main.py,然后输入以下代码:

from fastapi import FastAPI

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

# 定义一个路由:当用户访问根路径时,返回欢迎信息
@app.get("/")
async def root():
    return {"message": "欢迎来到FastAPI餐厅!你好,世界!"}

生活化类比: 这里,@app.get("/")就像一个菜单招牌,告诉顾客在餐厅门口可以点“欢迎餐”。函数root是厨师(服务器),准备这道菜。

运行应用: 在终端中,导航到你的文件所在目录,运行:

uvicorn main:app --reload
  • main 是你的文件名(不带.py)。
  • app 是代码中创建的FastAPI实例。
  • --reload 允许代码更改时自动重启,便于调试。

成功时刻:打开浏览器访问 http://127.0.0.1:8000,你会看到JSON消息:{"message": "欢迎来到FastAPI餐厅!你好,世界!"}。恭喜,你的第一个Web应用上线了!

第三步:理解依赖项和子依赖

在FastAPI中,依赖项是帮助你管理代码的工具。它们就像餐厅的厨房设备或助手,让你可以重用逻辑,比如检查用户是否登录或处理数据验证。

依赖项(Dependencies): 想象成主厨依赖的通用工具,比如刀或锅。你可以定义它,并在多个菜品(API端点)中使用。

子依赖(Sub-dependencies): 这是依赖项中的依赖。例如,主厨(主依赖)可能需要一个助手(子依赖)来准备食材。这让你构建更复杂的逻辑,同时保持代码整洁。

示例:使用依赖项和子依赖

我们来创建一个简单例子。假设餐厅需要验证顾客的订单是否有效(依赖项),而这个验证需要先检查顾客ID(子依赖)。

更新你的main.py

from fastapi import FastAPI, Depends

app = FastAPI()

# 子依赖:检查顾客ID
async def get_customer_id(customer_id: str = "default"):
    """模拟检查顾客ID,返回它。"""
    return customer_id

# 主依赖:验证订单,依赖于顾客ID
async def verify_order(customer_id: str = Depends(get_customer_id)):
    """验证订单是否有效。"""
    # 这里可以添加更多逻辑,比如检查订单内容
    if customer_id == "default":
        return {"status": "订单无效,请提供有效顾客ID"}
    return {"status": f"订单有效,顾客ID: {customer_id}"}

# API端点:处理订单,使用主依赖
@app.get("/order")
async def place_order(order_status: dict = Depends(verify_order)):
    """顾客点餐端点。"""
    return order_status

解释:

  • get_customer_id 是子依赖,它返回顾客ID。默认值是"default",可以想象成如果顾客没带会员卡,就用默认ID。
  • verify_order 是主依赖,它依赖get_customer_id(通过Depends)。它检查ID并返回验证结果。
  • @app.get("/order") 是API端点,使用verify_order作为依赖,这样每个订单请求都会自动验证。

运行和测试: 重启应用(如果还在运行,uvicorn会自动重启)。在浏览器中:

  • 访问 http://127.0.0.1:8000/order,你会看到:{"status": "订单无效,请提供有效顾客ID"},因为使用了默认ID。
  • 访问 http://127.0.0.1:8000/order?customer_id=123,你会看到:{"status": "订单有效,顾客ID: 123"}。

成功时刻:你刚刚使用了依赖项和子依赖!这就像餐厅系统自动检查顾客ID,让你专注于处理订单。试试更改代码,比如添加更多验证逻辑,体验FastAPI的灵活性。

第四步:扩展你的应用

现在你已经掌握了基础,可以尝试添加更多功能:

  • 添加更多路由: 比如/menu返回菜单列表。
  • 处理POST请求: 让顾客可以提交订单数据。
  • 使用路径参数: 例如,/items/{item_id} 获取特定商品。

示例:添加一个菜单路由

@app.get("/menu")
async def get_menu():
    return {"menu": ["披萨", "汉堡", "沙拉"]}

访问 http://127.0.0.1:8000/menu 查看结果。

成功时刻:每次添加新功能,你都会看到即时反馈,这能大大增强你的信心!

第五步:总结和下一步

恭喜你完成了FastAPI入门教程!你已经学会了:

  • 安装FastAPI并运行第一个应用。
  • 创建API端点并理解路由。
  • 使用依赖项和子依赖来管理代码逻辑,就像餐厅系统优化流程。

FastAPI还有很多高级功能,如自动生成文档、处理数据库等。但作为初学者,你已经迈出了坚实的第一步。

鼓励的话: Web开发可能一开始看起来复杂,但FastAPI让你像搭积木一样轻松。继续实践,尝试修改代码、添加新功能,你会越来越熟练。

如果需要帮助,可以查阅FastAPI官方文档或加入社区。祝你编程愉快!


练习建议:

  1. 修改依赖项逻辑,比如添加订单金额验证。
  2. 创建一个POST端点,接收JSON数据并处理。
  3. 探索FastAPI的自动交互式文档(访问 http://127.0.0.1:8000/docs)。
开发工具推荐
Python开发者工具包

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

获取工具包