作为一名资深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的。

工具

  • pyenv python版本管理
  • poetry 虚拟环境和依赖库管理,使用体验比较像nodejs这边的yarn
  • pipx python工具管理