做护肤品好的网站好,wordpress使用模板,适合前端做项目的网站,公司网站维护都需要怎么做目录 前言#xff1a;为什么后端圈都在推FastAPI#xff1f; 第一阶段#xff1a;环境搭建与Hello World#xff08;含避坑指南#xff09; 第二阶段#xff1a;参数接收的艺术#xff08;自动校验的快乐#xff09; 第三阶段#xff1a;Pydantic——数据验证的神器…目录前言为什么后端圈都在推FastAPI第一阶段环境搭建与Hello World含避坑指南第二阶段参数接收的艺术自动校验的快乐第三阶段Pydantic——数据验证的神器第四阶段依赖注入——FastAPI的灵魂第五阶段异步编程Async/Await通俗原理解析第六阶段进阶与生产环境部署总结与学习路线1. 前言为什么后端圈都在推FastAPI在Python Web开发的江湖里曾经长期被Django大而全的重型武器和Flask小而美的轻量级匕首统治。但是最近几年一位名为FastAPI的新星横空出世迅速席卷了全球Python开发者的心。在GitHub上的Star增长速度甚至远超前辈一张表看懂为什么选它特性DjangoFlaskFastAPI性能一般 (同步)一般 (同步)极高 (原生异步媲美Go/Node)开发速度快 (很多魔法)慢 (需手写很多组件)极快 (自动文档代码提示)代码提示弱弱强 (基于Type Hints)上手难度困难简单简单核心优势快Fast基于Starlette和Pydantic是Python圈目前最快的框架之一。高效编码代码提示极其智能官方宣称能减少40%的Bug。自动文档写完代码自动生成Swagger UI文档前后端联调再也不用扯皮了现代化原生支持异步Asyncio轻松应对高并发。如果你是Python新手或者想从Flask/Django转型FastAPI绝对是你2024年必须掌握的“加薪”技能2. 第一阶段环境搭建与Hello World2.1 安装建议使用虚拟环境首先确保你的Python版本在3.8。打开终端CMD/Terminal输入以下命令安装FastAPI和ASGI服务器Uvicorn# 强烈建议先创建虚拟环境 python -m venv venv # Windows 激活 .\venv\Scripts\activate # Mac/Linux 激活 source venv/bin/activate # 安装全家桶 pip install fastapi[all]Note[all]会自动安装uvicorn服务器和pydantic等核心依赖库省心省力。2.2 编写第一个API新建一个文件main.py复制以下代码from fastapi import FastAPI # 1. 创建API实例 app FastAPI() # 2. 定义路由和操作GET方法 app.get(/) async def root(): return {message: Hello World, FastAPI is awesome!} # 3. 定义另一个带参数的路由 # 注意这里使用了类型提示 (item_id: int) app.get(/items/{item_id}) async def read_item(item_id: int): return {item_id: item_id}2.3 启动服务在终端运行uvicorn main:app --reloadmain你的文件名main.py。app你在代码中创建的实例名app FastAPI()。--reload热重载模式修改代码后自动重启开发神器生产环境请去掉。2.4 见证奇迹时刻启动后打开浏览器访问http://127.0.0.1:8000/你会看到JSON响应。重点来了访问http://127.0.0.1:8000/docs。你会看到一个全自动生成的交互式文档Swagger UI你可以在这里直接测试接口无需安装Postman。这是FastAPI最吸粉的功能之一。3. 第二阶段参数接收的艺术Path QueryWeb开发中最常做的就是接收前端传来的数据。FastAPI利用Type Hints类型提示把这件事做到了极致。3.1 路径参数 (Path Parameters)路径参数就是URL的一部分例如/users/5中的5。app.get(/users/{user_id}) async def get_user(user_id: int): # 注意这里的 : int return {user_id: user_id, type: str(type(user_id))}FastAPI的魔法如果你访问/users/5user_id会自动转换成整型5。如果你访问/users/fooFastAPI会自动报错422 Validation Error因为它知道这应该是个int。省去了大量的if type(user_id) ! int:这种校验代码3.2 查询参数 (Query Parameters)声明不属于路径参数的其他函数参数时它们自动被解释为查询参数URL中?后面的部分。app.get(/items/) async def read_item(skip: int 0, limit: int 10): return { data: [{item_name: Foo}, {item_name: Bar}], pagination: {skip: skip, limit: limit} }访问http://127.0.0.1:8000/items/- 使用默认值skip0,limit10。访问http://127.0.0.1:8000/items/?skip20limit5- 获取指定分页数据。4. 第三阶段Pydantic——数据验证的神器当我们需要接收复杂的JSON数据例如POST请求提交表单时FastAPI结合Pydantic库提供了无与伦比的体验。4.1 定义数据模型假设我们要创建一个商品包含名称、价格、描述可选。from typing import Optional from pydantic import BaseModel # 定义一个继承自BaseModel的类 class Item(BaseModel): name: str price: float is_offer: Optional[bool] None # 可选字段默认None description: Optional[str] None4.2 使用模型接收 Request Bodyapp.post(/items/) async def create_item(item: Item): # 直接将参数类型指定为Item类 # 在这里item 已经是一个对象了IDE会智能提示 result item.dict() if item.price 100: result.update({tax: item.price * 0.1}) return result新手小白看过来这里发生了什么自动读取FastAPI读取HTTP请求的BodyJSON格式。自动校验确保price是浮点数name是字符串。如果前端传了price: abc接口直接报错保护你的业务逻辑。智能感知你在写代码时输入item.IDE会自动提示name,price等属性。爽不爽5. 第四阶段依赖注入——FastAPI的灵魂这是FastAPI最强大的功能没有之一。听起来很高级其实很简单“把重复做的事情提取出来让框架帮你自动执行”。场景很多接口都需要验证Token或者获取数据库连接。5.1 创建一个依赖项from fastapi import Depends # 模拟一个数据库连接或者公共逻辑 async def common_parameters(q: Optional[str] None, page: int 1): return {q: q, page: page, limit: 100} app.get(/items/) # Depends 告诉 FastAPI运行 read_items 前先运行 common_parameters async def read_items(commons: dict Depends(common_parameters)): return commons app.get(/users/) async def read_users(commons: dict Depends(common_parameters)): return commons解析通过Depends我们复用了common_parameters的逻辑。如果未来要修改分页逻辑只需要改这一处常见用途数据库 Session 管理用户权限校验OAuth2提取头部信息6. 第五阶段异步编程Async/AwaitPython以前被人诟病慢主要是因为并发处理能力弱。FastAPI原生支持async。6.1 “餐厅服务员”模型解释 Async同步Sync/Flask只有一个服务员。客人点了一个需要做30分钟的菜服务员就傻站在厨房门口等30分钟期间不能服务其他客人。异步Async/FastAPI服务员把单子给厨房await然后立刻去服务下一桌客人。等菜做好了厨房通知服务员服务员再把菜端上去。6.2 代码实战如果你的代码里有涉及IO操作如读写数据库、请求第三方API、读写文件请务必使用async。import asyncio app.get(/slow-task) async def slow_task(): # 模拟一个耗时3秒的IO操作 # 在这3秒内FastAPI可以去处理成千上万个其他请求 await asyncio.sleep(3) return {message: 这个任务虽然慢但不会阻塞其他人的请求}7. 第六阶段生产环境部署代码写好了怎么上线千万不要直接用uvicorn main:app --reload在生产环境跑那个是开发用的。7.1 使用 Docker 部署推荐标准姿势编写Dockerfile:FROM python:3.9-slim WORKDIR /code # 先复制依赖文件利用Docker缓存层 COPY ./requirements.txt /code/requirements.txt RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt COPY ./app /code/app # 使用 CMD 启动生产级服务 CMD [uvicorn, app.main:app, --host, 0.0.0.0, --port, 80]7.2 传统部署 (Gunicorn Uvicorn)在Linux服务器上我们通常使用Gunicorn作为进程管理器搭配Uvicorn的Worker类。pip install gunicorn # 启动4个Worker进程绑定8000端口 gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:80008. 总结FastAPI 不仅仅是一个框架它代表了Python Web开发的“现代标准”类型安全基于Type Hints写代码既快又准。性能怪兽异步加持不再惧怕高并发。开发者体验自动文档和依赖注入让你爱上写后端。给小白的学习建议先从简单的GET请求开始 - 尝试用Pydantic定义数据结构 - 学习如何连接数据库建议看SQLAlchemy- 最后攻克依赖注入和OAuth2认证。只要迈出第一步你会发现FastAPI真的非常“Friendly”