13.1 asyncio 基础回顾
Python初学者FastAPI入门教程:从asyncio基础到Web开发
本教程为Python初学者提供FastAPI入门指南,详细讲解asyncio基础概念,通过简单易懂的动手实践,帮助您快速构建首个Web应用,建立Web开发信心。
FastAPI入门教程:从asyncio基础到Web开发
欢迎来到面向Python初学者的FastAPI入门教程!如果您有一些Python语法知识,但对Web开发一窍不通,那么您来对地方了。本教程将帮助您从零开始,通过简单易懂的步骤,快速上手FastAPI,并在过程中回顾必要的asyncio基础。我们将避免深奥的理论,专注于动手实践,让您在几分钟内看到成果,建立信心!
第一部分:为什么选择FastAPI?
FastAPI是一个现代的、快速的(高性能)Python Web框架,用于构建API。它基于Python的异步编程库asyncio,这使得它在处理并发请求时非常高效。想象一下,您开一家小店,如果只能一个一个地接待顾客(同步),人一多就会排队等待;但FastAPI就像是雇佣了多个员工(异步),可以同时服务多个顾客,大大提高效率。这就是异步编程的魅力,而asyncio是它的核心工具。
第二部分:asyncio基础回顾
在进入FastAPI之前,让我们快速回顾一下asyncio,它是异步编程的基础。如果您是初学者,不用担心——我们将用生活化类比来解释。
什么是异步编程?
- 同步编程:就像您在厨房做饭,必须一步一步来:先切菜,然后炒菜,再煮饭,每步都完成后才能开始下一步。如果某一步很耗时(比如煮饭),您就得干等着。
- 异步编程:就像您同时管理多个任务,比如一边煮饭(让它自动进行),一边切菜和炒菜。当煮饭在等待时,您可以做其他事情,而不浪费时间。在编程中,异步允许代码在等待某些操作(如网络请求)完成时,执行其他任务,从而提高效率。
asyncio基本概念
- async/await:这是Python的语法糖,用于定义异步函数和等待异步操作。简单说,
async声明一个函数是异步的,await表示“请等待这个异步操作完成,但在此期间我可以做其他事”。 - 事件循环:想象成一个调度员,它管理所有异步任务,确保它们高效运行。
简单asyncio示例:建立您的第一个“成功时刻”
让我们写一个简单的Python脚本来感受异步。确保您安装了Python 3.7或更高版本(asyncio已内置)。
import asyncio
import time
# 定义一个异步函数
async def say_hello(name, delay):
await asyncio.sleep(delay) # 模拟耗时操作,但不会阻塞
print(f"Hello, {name}! after {delay} seconds")
# 主异步函数
async def main():
# 创建异步任务列表
tasks = [
say_hello("Alice", 2),
say_hello("Bob", 1),
say_hello("Charlie", 3)
]
# 并发运行任务
await asyncio.gather(*tasks)
print("所有问候完成!")
# 运行事件循环
if __name__ == "__main__":
start_time = time.time()
asyncio.run(main()) # 这是Python 3.7+的简便方式
end_time = time.time()
print(f"总用时: {end_time - start_time:.2f} 秒")
运行这个脚本,您会看到输出类似:
Hello, Bob! after 1 seconds
Hello, Alice! after 2 seconds
Hello, Charlie! after 3 seconds
所有问候完成!
总用时: 3.00 秒
注意:即使任务有不同延迟,它们几乎是同时完成的,总用时约3秒(最长延迟),而不是6秒(如果同步运行)。这就是异步的威力!现在您已经体验了第一个“成功时刻”。
第三部分:安装FastAPI
在开始FastAPI之前,确保您有Python环境。然后,打开终端或命令提示符,运行以下命令安装FastAPI和必要的依赖:
pip install fastapi uvicorn
- fastapi:FastAPI框架本身。
- uvicorn:一个轻量级的ASGI服务器,用于运行FastAPI应用。ASGI(异步服务器网关接口)是支持异步的Web服务器标准。
第四部分:您的第一个FastAPI应用:Hello World
让我们创建一个最简单的FastAPI应用,让您在浏览器中看到“Hello World”!
- 创建一个新文件,命名为
main.py。 - 在文件中编写以下代码:
from fastapi import FastAPI
import uvicorn
# 创建一个FastAPI实例
app = FastAPI()
# 定义一个根路径的路由
@app.get("/")
async def read_root():
return {"message": "Hello World!"}
# 运行服务器
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
- 在终端中,导航到文件所在目录,运行:
python main.py
您会看到输出类似:
INFO: Started server process [12345]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
- 打开浏览器,访问
http://localhost:8000,您将看到JSON响应:{"message": "Hello World!"}。恭喜!您的第一个Web API已经运行起来了!这是另一个“成功时刻”。
解释代码:
from fastapi import FastAPI:导入FastAPI框架。app = FastAPI():创建一个应用实例。@app.get("/"):这是一个装饰器,表示当用户访问根路径(“/”)时,调用下面的函数。get表示处理HTTP GET请求。async def read_root():定义异步函数来处理请求,这里直接返回一个字典。FastAPI会自动将其转换为JSON响应。uvicorn.run(...):启动服务器,监听所有网络接口(0.0.0.0)的8000端口。
第五部分:扩展您的FastAPI应用
现在,让我们添加更多功能,巩固您的学习。
示例:添加一个新路由
修改 main.py,添加一个新路径:
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Hello World!"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "query": q}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
重新启动服务器(按CTRL+C停止,然后再次运行 python main.py),然后在浏览器中访问:
http://localhost:8000/items/123将返回{"item_id": 123, "query": null}。http://localhost:8000/items/123?q=test将返回{"item_id": 123, "query": "test"}。
看,FastAPI自动处理了路径参数(item_id)和查询参数(q),并将它们转换为Python类型(如整数)。这就是FastAPI的自动文档和类型检查功能在背后工作。
查看自动API文档
FastAPI自带交互式API文档。在浏览器中访问 http://localhost:8000/docs,您将看到一个漂亮的Swagger UI界面,展示了您的所有路由,并允许您直接测试API。试一试点击端点,看看它是如何工作的!这又是一个令人兴奋的“成功时刻”,让您直观地看到API的功能。
第六部分:总结和下一步
通过本教程,您已经:
- 回顾了asyncio基础,理解了异步编程的概念。
- 安装了FastAPI和uvicorn。
- 创建了您的第一个FastAPI应用,并成功运行了“Hello World” API。
- 扩展了应用,添加了新的路由,并体验了自动文档功能。
现在,您已经建立了初步的信心,可以继续探索FastAPI的更多特性,如POST请求、数据库集成、身份验证等。记住,实践是最好的老师——尝试修改代码,添加自己的功能,或查看官方文档(https://fastapi.tiangolo.com/)以深入学习。
成功提示:每当您运行代码并看到预期结果时,庆祝一下这些“成功时刻”,它们将激励您继续前进!祝您学习愉快,快速成为Web开发高手!