fastAPI基础知识

fastAPI基础知识 一.定义FastAPI 是一个用于构建 API Application Programming Interface应用程序编程接口的现代、高性能 Python Web 框架基于 Python 3.8 的标准类型提示开发它完美兼顾了开发效率、运行性能和代码质量是目前 Python 后端开发最热门的框架之一。URLUniform Resource Locator中文统一资源定位符简单来说就是网址URL 的组成以这个空网址为例http://127.0.0.1:8080/user/10086?name张三协议http://地址127.0.0.1本机端口8080路径/user/10086参数?name张三二、环境准备安装 FastAPI 和 ASGI 服务器pip install fastapi uvicorn[standard]fastapi框架本体uvicorn轻量级 ASGI 服务器用于运行 FastAPI 应用基础代码示例import uvicorn from fastapi import FastAPI app FastAPI() app.get(/) async def root(): return {message:nihao} # async 让接口异步非阻塞一个线程能同时处理大量并发请求不用傻等 I/O 操作。 app.get(/user/{user_id}) async def get_user(user_id:int,name:str None): user_id:路径参数 name:查询参数 return {user_id:user_id,name:name} if __name__ __main__: uvicorn.run(app, host127.0.0.1, port8080)图中的网址就是入口了if __name__ __main__:这是 Python 的程序入口判断含义只有直接运行这个文件时才执行下面的代码如果这个文件被当作模块导入下面的代码不会执行作用避免在被导入时意外启动服务器uvicorn.run(...)uvicornPython 异步 ASGI 服务器用来运行 FastAPI 程序app你的 FastAPI 应用实例host127.0.0.1只允许本机访问port8080服务运行在 8080 端口三、FastAPI 核心概念1. 路由与请求方法支持所有标准 HTTP 方法app.get(/) # 查询 app.post(/) # 创建 app.put(/) # 更新 app.delete(/) # 删除 app.patch(/) # 部分更新app是一个 “装饰器”作用是给函数绑定一个网址接口。/是根路径http://127.0.0.1:8000/2. 参数类型4 种核心参数FastAPI 自动区分参数类型无需额外配置路径参数/user/{id}查询参数?分隔符key参数名value请求体参数POST/PUT 的 JSON 数据用 Pydantic 模型表单 / 文件参数上传文件、表单数据3. Pydantic 模型请求体 数据验证这是 FastAPI 最强大的功能之一用类定义数据结构自动校验。示例from pydantic import BaseModel # 定义数据模型 class User(BaseModel): id: int # 必传整数 name: str # 必传字符串 age: int | None None # 可选参数 # 接收 JSON 请求体 app.post(/create-user) async def create_user(user: User): # 直接使用 user.name / user.age return {msg: 创建成功, data: user.dict()}自动校验传字符串给age会直接返回错误无需手动判断。4. 异步支持IO 密集型任务数据库、HTTP 请求用异步性能翻倍import httpx app.get(/async-data) async def async_data(): # 异步发送 HTTP 请求 async with httpx.AsyncClient() as client: resp await client.get(https://api.github.com) return resp.json()异步是计算机编程中的核心概念指程序在执行某个操作时不需要等待该操作完成可以继续执行其他任务。对比同步 (Synchronous)异步 (Asynchronous)执行方式按顺序执行阻塞等待不阻塞任务在后台进行async — 声明这是一个协程函数可被挂起和恢复await —挂起当前协程等待 I/O 完成不阻塞线程连接池在 await 期间把线程让给别的协程用数据库/网络 I/O 操作通常要等待几毫秒到几秒。同步模式下线程干等着异步模式下一个线程可以并发处理成千上万个连接大幅提升性能。async with异步上下文管理器自动创建 / 销毁连接不用手动开关httpx.AsyncClient()异步请求客户端专门用来发异步网络请求as client给·客户端起个名字叫clientresp.json()把响应内容解析成字典 / JSON5. 依赖注入Dependency InjectionFastAPI 独创的超级实用功能用于验证登录态数据库连接通用参数提取权限校验代码复用性极强解耦业务逻辑# 定义依赖检查是否登录 async def check_login(token: str): if not token: raise HTTPException(status_code401, detail未登录) return token # 使用依赖 app.get(/profile) async def get_profile(token: str Depends(check_login)): return {user: admin}token是身份验证令牌用于标识和验证用户身份。HTTPException 是FastAPI 框架中用于主动抛出 HTTP 错误响应的异常类。6. 中间件、CORS、异常处理支持跨域CORS配置自定义异常处理器全局中间件记录日志、统计耗时等四、进阶实用功能1. 数据库集成同步SQLAlchemy、MySQLdb异步SQLAlchemy 1.4、Tortoise-ORM、Databases官方推荐SQLAlchemy Pydantic2. 文件上传支持单文件、多文件、表单混合上传from fastapi import File, UploadFile app.post(/upload) async def upload(file: UploadFile File(...)): content await file.read() return {文件名: file.filename, 大小: len(content)}3. 后台任务无需等待任务完成直接返回响应发送邮件、日志记录from fastapi import BackgroundTasks def send_email(msg: str): # 耗时操作 pass app.post(/send) async def send(background_tasks: BackgroundTasks): background_tasks.add_task(send_email, 您好) return {msg: 邮件已加入后台发送}4. 认证与权限OAuth2 JWT最常用API Key 认证内置权限校验系统