作为一名资深Python CRUD boy,在今天用flask和django干这些体力活已经稍显过时,flask这些年来功能并没太大进步,想用什么还是得自己折腾,在工程化方面比较考验开发者的个人素养。而django的虽然功能完善,但它的笨重在需要深度定制时,又显得束手束脚。
近些年来FastAPI异军突起,在成熟度上已经足够赶上这些老古董们。为了让我们的体力活干得又快又好,腾出更多的时间摸鱼,在这里整理下我们在现在这个时间节点(2024年)应该用什么CRUD,技术选型需要注意适用场景,本文选型适用于以下场景:
- 项目前后端分离,或以实现微服务/朴素的HTTP接口为主
- 认证模型简单,最多JWT
对于不不满足以上条件的项目,或者在搞外包,建议直接Django,看看Django REST Framework(基于Django的RESTful API框架)和wagtail(基于Django的可定制化CMS)是否满足您的需要
技术栈
库
- Pydantic 可以认为它是这套技术栈的核心,它作为一个Schema定义库,能够把配置解析,后面的ORM定义和查询到前面的API定义,参数校验,序列化等事情统一完成,减少手工转换的麻烦,能够极大提升生产力。
- FastAPI API框架,长得样子和flask很像,但功能更加完善。支持同步和异步,使用Pydantic作为数据模型,可以根据接口参数自动生成API文档。
- SQLModel 使用Pydantic进行SQL数据库的orm schema定义和查询
- beanie 如果用MongoDB,那么可以试试这个,也是使用Pydantic做定义
- httpx 用来发http请求的库,支持同步和异步,用来替换掉requests
- typer 命令行参数解析库
- loguru 一个功能很完善的logging库,比Python内置的好用不少
- rich 优化print输出样式的库,打印东西更美观好看,在调试时十分有用
- arrow 日期和时间库
- celery 任务队列,有一些定时任务或者异步后台任务要跑,可以用这个库,主要支持Redis和RabbitMQ。这也是个古董了,但一直没有靠谱的替代品。
- rq 如果任务不太重要,或者不喜欢上面的celeryrq,需要轻量级的解决方案,可以试试这个只支持Redis的。