FastAPI 教程

4.4 文件响应:FileResponse

Python初学者快速上手FastAPI:从零开始构建Web API,轻松建立Web开发信心

FastAPI 教程

面向Python初学者的FastAPI入门教程,无需Web开发经验。通过动手实践、生活化类比和简单示例,从安装到运行第一个API,快速掌握基础概念并体验成功时刻。帮助您轻松上手FastAPI,建立Web开发信心。

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

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

了解更多

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

介绍FastAPI:你的第一个Web API建造工具

欢迎!如果你已经掌握了一些Python语法,想尝试Web开发但不知从何下手,那么你来对地方了。FastAPI是一个现代的Python Web框架,它就像乐高积木一样易于组装:你只需用Python写几行代码,就能快速搭建起一个功能强大的Web API。为什么选它?因为它设计简洁、文档清晰,特别适合初学者快速上手。想象一下,FastAPI是你的点餐系统菜单:你可以定义“菜名”(API端点),并告诉系统如何“准备菜品”(处理请求),客户端(如浏览器或手机应用)就能点餐(发送请求)并收到美味的食物(响应)。

第一步:安装FastAPI,快速启动你的“厨房”

在开始编码前,我们需要设置环境。确保你已安装Python(建议3.7以上版本)。打开终端或命令提示符,运行以下命令来安装FastAPI和其服务器Uvicorn(Uvicorn是运行FastAPI的服务器,就像餐厅的“厨师”):

pip install fastapi uvicorn

成功时刻:安装完成后,你会看到类似“Successfully installed”的消息。恭喜!你的“厨房”已准备好,可以开始做菜了。

第二步:创建你的第一个API端点,体验“Hello World”的喜悦

现在,创建一个新Python文件,比如 main.py。我们将编写一个简单的API,返回“Hello World”。

# main.py
from fastapi import FastAPI

# 创建一个FastAPI应用实例,就像设计餐厅的菜单
app = FastAPI()

# 定义一个路由(或端点),当用户访问根路径“/”时,返回“Hello World”
@app.get("/")  # @app.get 表示这是一个GET请求的端点,就像菜单上的“招牌菜”
async def read_root():
    return {"message": "Hello World"}  # 返回一个JSON响应,告诉客户端我们的欢迎语

解释:

  • @app.get("/") 是一个装饰器,它告诉FastAPI:当客户端通过GET请求访问路径“/”(根路径)时,执行下面的函数。
  • async def read_root() 是一个异步函数,这是FastAPI的推荐写法,可以提高性能。但如果你是初学者,先不用担心异步细节,这里只需知道它返回一个响应。
  • 函数返回一个字典,FastAPI会自动将其转换为JSON格式(JSON是一种数据交换格式,就像菜单用文字描述菜品)。

成功时刻:保存文件后,你已经定义了第一个API!它虽然简单,但功能完整:客户端可以发送GET请求获取消息。

第三步:运行API服务器,让你的“餐厅”开张

在终端中,导航到 main.py 文件所在的目录,运行以下命令启动服务器:

uvicorn main:app --reload

解释:

  • uvicorn 是服务器程序。
  • main:app 指定了应用:main 是文件名(不含.py),app 是我们在代码中创建的 FastAPI 实例。
  • --reload 选项启用热重载,这样你修改代码后服务器会自动重启,便于开发。

运行后,你会看到类似“Uvicorn running on http://127.0.0.1:8000”的消息。成功时刻:你的API服务器正在运行!打开浏览器,访问 http://127.0.0.1:8000,你应该会看到JSON响应 {"message": "Hello World"}。太棒了!你刚刚成功运行了第一个Web API。

第四步:添加更多端点,让你的“菜单”丰富多彩

现在,让我们扩展API,添加一个处理路径参数的端点。假设你想让用户通过URL获取个性化问候,比如访问 /hello/Alice 时返回“Hello, Alice”。

更新 main.py 文件:

# main.py
from fastapi import FastAPI

app = FastAPI()

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

# 定义一个新端点,处理路径参数
@app.get("/hello/{name}")  # {name} 是路径参数,就像菜单上可以根据顾客名字定制菜品
async def read_hello(name: str):  # FastAPI会自动从URL中提取参数,并验证其为字符串
    return {"message": f"Hello, {name}"}  # 使用f-string返回个性化消息

成功时刻:保存文件,服务器会自动重载(如果你用了--reload)。现在在浏览器访问 http://127.0.0.1:8000/hello/Alice,你会看到 {"message": "Hello, Alice"}。尝试换成其他名字,比如 /hello/Bob,体验动态响应的乐趣!

第五步:处理POST请求,让你的API“接受订单”

除了GET请求(用于获取数据),Web API还可以处理POST请求(用于提交数据)。让我们添加一个端点,允许客户端发送JSON数据来创建新用户。

再次更新 main.py

# main.py
from fastapi import FastAPI
from pydantic import BaseModel  # 导入Pydantic用于数据验证

app = FastAPI()

# 定义一个数据模型,就像定义订单的格式
class User(BaseModel):
    name: str
    age: int

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

@app.get("/hello/{name}")
async def read_hello(name: str):
    return {"message": f"Hello, {name}"}

# 定义一个POST端点,用于创建用户
@app.post("/users/")  # @app.post 表示这是一个POST请求的端点,就像接受新订单
async def create_user(user: User):  # FastAPI会自动解析请求体,并根据User模型验证数据
    # 这里简单返回接收到的用户数据,实际中可能会保存到数据库
    return {"message": "User created successfully", "user": user}

成功时刻:现在你的API可以处理POST请求了!要测试这个端点,你需要一个工具来发送POST请求,比如使用浏览器扩展(如Postman)或命令行工具curl。这里用curl示例:

在终端运行(确保服务器正在运行):

curl -X POST "http://127.0.0.1:8000/users/" -H "Content-Type: application/json" -d '{"name":"John", "age":30}'

你应该会看到响应:{"message":"User created successfully","user":{"name":"John","age":30}}。看,你的API成功“接收订单”并返回确认信息!

第六步:探索更多功能,建立持续学习的信心

通过以上步骤,你已经掌握了FastAPI的核心概念:

  • 路由和端点:用 @app.get()@app.post() 定义。
  • 路径参数:在URL中使用 {variable} 捕获值。
  • 请求体:使用Pydantic模型处理POST请求的数据。

这些基础足以让你构建简单API。FastAPI还有很多高级功能,如查询参数、依赖注入、错误处理等,但作为初学者,先庆祝你的成就吧!

建议下一步

  1. 修改代码,尝试添加更多端点,比如一个返回列表的端点。
  2. 访问FastAPI官方文档(https://fastapi.tiangolo.com/)——它非常友好,有交互式示例,可以深入学习。
  3. 构建一个小项目,比如一个待办事项API,将你的知识应用于实践。

总结:你已经成为FastAPI的入门者

恭喜完成本教程!你从零开始,安装了FastAPI,创建了多个API端点,并成功运行和测试了它们。记住,Web开发就像学习做菜:开始时只需掌握几个简单食谱,随着练习,你会越来越自信。FastAPI是你的得力工具,继续探索,享受编码的乐趣吧!

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

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

获取工具包