fastapi
观念
如果Web开发已经很少用后端模版(??),大部分用前后端分离的方式通过API提供数据交互,那么 Django和Flask主要用途是API应用
Django REST Framework
APIFlask
Flask扩展方式, Flask Context等知识,
FastAPI的思路是依赖注入,不需要创建插件,这个灵活度很高,不用像Django和Flask必须适配。
作为API应用确实不需要模版引擎,如果需要,它也提供了Jinja2相关部分
一些商业场景(例如CMS)Django依然是首选
fastapi 处理数据
BackgroundTasks 如果任务较小(如短信通知等),且需要在同一 FastAPI 应用中访问变量和对象,使用 BackgroundTasks 即可
路径参数 路径参数是通过 URL 路径传递的参数,例如 /item/{item_id}
查询参数 查询参数是通过 URL 的查询字符串传递的,例如 /items?search=something。
表单数据 如果你需要从表单数据中获取参数,你可以使用 Form 类型
JSON 数据 对于 POST 请求中的 JSON 数据,你可以直接将数据作为函数参数传递
直接使用 request 对象 通常不是最佳实践。
使用Body函数 :通过from fastapi import Body导入Body函数,将参数声明为从请求体中获取
最佳实践是使用 FastAPI 的依赖注入和类型提示系统来获取请求数据,FastAPI 的依赖注入和类型提示系统可以更好地保证类型安全和代码清晰
使用 Pydantic 模型 :使用 Pydantic 模型来定义请求体的结构和验证规则,然后在接口函数中将该模型作为参数类型
FastAPI中建议使用 Pydantic 模型声明请求体
FastAPI 的 Depends 是用于依赖注入的核心工具,
API开发中数据格式的验证、解析和序列化是很常用的
集成了Pydantic,所以非常容易在项目中添加ORM(如SQLAlchemy),
从请求中获得的对象可以直接传递到数据库,因为已经做过数据验证。反之亦然,可以将从数据库获取的对象直接返回。
路由管理
在fastapi 中也有类似的功能通过 APIRouter 来管理
在 Flask 中,我们一般用蓝图 Blueprint 来处理多个模块的视图,
1、路由的注册过程
1)使用 FastAPI 实例注册路由
2)使用 APIRouter 模块化路由
3)路由注册装饰器方法
include_router 来统一在一个文件里进行路由管理
判断依据
果你想知道有多少人在用 Flask 和 FastAPI,
有两个参考数据,
一个是 GitHub 上开源项目的用户数量统计。这些可以在两个项目的 GitHub 主页直接看到。
另一个数据是 PyPI 下载量,这个可以在 PyPI Download Stats 上看到
老项目的存在-下载量代表的价值有限
Flask和FastAPI现阶段都足够稳定,但是FastAPI有足够的优势,
sqlmodel sqlalchemy
请求
如果参数的类型被声明为一个 Pydantic 模型,它将被解释为请求体
curl -X POST "http://127.0.0.1:8000/items/" -H "Content-Type: application/json" \
-d '{"name": "Apple", "description": "Fresh red apple", "price": 3.5, "in_stock": true}'
响应
JSONResponse 是 FastAPI 的默认响应类型,它会将数据转换为 JSON 格式,并设置Content-Type为application/json。
ORJSONResponse 当追求极致性能时,可使用ORJSONResponse,它基于orjson库实现,序列化速度更快,适合大数据量响应。
PlainTextResponse 返回纯文本内容时,使用 PlainTextResponse,设置Content-Type为text/plain
RedirectResponse 用于实现 HTTP 重定向,默认状态码为 307(临时重定向),也可自定义状态码
处理大文件或持续生成的数据时,StreamingResponse能避免一次性加载全部内容,提升内存使用效率。
FileResponse用于异步流式传输文件,会自动添加Content-Length、Last-Modified等响应头。
岗位职责:
2. 使用Python进行Web应用开发,至少使用一种Python开发框架,如Django、FastAPI等
任职要求:
熟练使用FastAPI web后端框架
fastapi参数
APIRouter 就给我们提供了在多个文件中注册路由的功能
参数类型:路径参数 与 查询参数 请求体参数
路径参数 用于指定URL的某个部分,通常用于标识资源的唯一性,
查询参数则用于提供过滤条件或额外的选项
请求体参数 要发送请求正文,必须使用一个:POST, PUT,DELETE或PATCH,需导入 Pydantic 的 BaseModel
参数校验
查询参数校验 长度限制、修改名称、正则限制…
SQLAlchemy
SQLAlchemy - The Database Toolkit for Python
SQLModel+ sqlite 适合初创项目、小型 API 服务:教学、内部工具、后台系统 搭配 FastAPI 效果最佳:天然一对
SQLAlchemy + PG
SQLModel
create_engine 用于创建数据库引擎,连接到指定的数据库
SQLModel.metadata.create_all 用于创建所有定义的表
Session 用于创建数据库会话
调用 session.add 方法添加数据。
调用 session.commit 提交数据
select 用于生成查询语句
session.exec 用于执行查询语句
参考
FastAPI 实现异步任务处理 https://blog.csdn.net/h1773655323/article/details/143775646
一起学 FastAPI https://github.com/ttfont/your-fastapi
https://fastapi.tiangolo.com/zh/
https://zhuanlan.zhihu.com/p/673847164
https://zhuanlan.zhihu.com/p/673774673
https://dev.to/blamsa0mine/-building-a-user-management-api-with-fastapi-and-sqlite-e53
https://www.geeksforgeeks.org/python/fastapi-sqlite-databases/
https://github.com/JiayuXu0/FastAPI-Template
https://github.com/thekingofhero2/nicegui-enough/blob/main/05%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/main.py