前言

去年9月,我写了一篇文章:Django过时了吗?从ASGI到AI时代的思考

当时痛陈 Django 的几个痛点:SSE/WebSocket 支持繁琐、框架太重不够轻量化……甚至立了 flag:新项目不会优先考虑 Django。

然而,谁能想到回旋镖来得这么快。

仅仅几个月后,经历在其他技术栈的摸爬滚打,我又把目光重新投向了 Django……🤣

碎碎念

那些年,我们写过的代码

说起来真是怀念啊。

我第一次接触 Web 开发得追溯到 2016 年。

那时用 PHP 做学生团队的考核题,代码还是那种直接在网页里拼接 SQL 的原始人写法。😂

第一次正经的 Web 开发体验,就是 Django 给的。

我已经记不太清楚是在什么情况下接触到 Django 框架了,只记得这个框架上手极快。

本来我只会一点点 Python,随着学习 Django,Python 水平也水涨船高。

从 2.0 版本入坑,一转眼现在 6.0 版本都发布了。

从大学到工作,我用 Django 开发了非常多的网站和后端项目,和admin、form这些斗智斗勇,操心过ORM的性能问题,也啃了不少框架源码… 总之要说我最熟练的框架,那 Django 肯定是能排上名的。

话说我毕设的后端也是用 Django 写的😄

很搞笑的是,我好长时间都把 Django 的名字念错了,正确叫法是“姜戈”,最前面的 D 不发音,而直到现在还有很多人念“D姜戈”。

PS:从 2016 年手写 SQL 的 PHP 时代,到后来接触 Django 2.0,我见证了这个框架的稳健。Django 的设计哲学是 "Batteries Included"(自带电池),这在当时不仅帮我赚到了第一桶金,也让我在后续的工作中,无论是面对复杂的需求还是独立产品,都有底气。

尽管很多人吐槽它重,甚至连名字都念不对(Remember, the 'D' is silent),但它始终是我用得最趁手的技术。

OK,这是一些碎碎念,接下来说回正题。

一些尝试

技术围城

为了寻找更现代的开发体验,这段时间我尝试了不少热门技术栈:

  • Next.js 全栈(搭配 drizzle, tRPC, better-auth)
  • Node.js 后端(Hono 框架)
  • AspNetCore(EFCore, FluentStorage)

我分别用这些技术开发了几个项目:

  • 社科测试平台(Next.js全栈 + 第三方 ws 服务实现聊天)
  • AI通话(Next.js 前端 + hono 后端)
  • 一个多 agent 的 SaaS AI 产品(AspNetCore+邪修前端

但其实都不是很顺手,各有各的问题,Next.js 全栈看起来很美好,但JS/TS 生态的繁荣也是它的诅咒,抛开生态非常散装不谈,最大的问题还是ORM太难用了,Prisma 和 Drizzle 感觉都是邪修🤣,唯一比较符合我口味的 MikroORM 又比较小众,搭配 better-auth 用还要各种折腾。

Node.js 后端体验还不错,准确说是 Hono 给我的感觉不错,语法上来讲我是更喜欢 nest.js 的,相信后端同学都会喜欢这个 nest.js ,不过 hono 实在是又轻功能又多,上次那篇 为什么说 Edge/Serverless 是最适合独立开发者的开发方式? 的文章,评论区有网友说是 hono 的软文。不好意思,我以后还可能写文章继续吹 hono 😄

AspNetCore 应该是编码体验最舒服的,不过现在是 2025 年,而不是 2020 年,编码体验不如 AI 适配性重要了😂,现在企业级开发的话,这个框架还是没问题的,但小团队、快速迭代的模式,开发起来速度还是慢了点,不过更大可能是我太菜了,架构没设计好,DDD在小项目是不可能用了,只能用传统MVC,但逻辑一复杂又容易变成一坨,我开发的这个项目,光 Service 接口就写了 30 多个,实现类 50 多个,这么多代码文件都在 service 层,代码乱得一批,维护起来令人头大。

重新转向Django

我本身是一个乐于学习和折腾新技术的人,但现在要做的事情很多,时间是非常有限的,常常为项目进度不够快而焦虑。

在生态成熟度、开发效率和代码严谨性之间做一个平衡,特别是考虑到现在的产品几乎都是围绕 AI 构建的,Django 就是一个非常合适的选择。意味着可以直接无缝调用各种 Python 生态的库,没有任何跨语言调用的损耗。

再加上我在 Django 领域多年的积累,以及自己维护,不再纠结之后,焦虑也随之减轻了很多。

所以与其花时间在 Next.js 里折腾 Auth 配置,或者在 .NET 里写繁琐的 DTO 转换,不如用 Django 开箱即用的 Admin、ORM 和 Auth 系统,快速把产品推向市场。我的 DjangoStarter项目模板 就是为此而生的。

当然,回归不代表无视问题。

在 AI 和异步流行的时代,选择 Django 会遇到不少问题,好在都不是无解。

SSE 和异步依然是 Django 的痛点,不过使用 django-ninja + ASGI 可以实现;异步的问题谈了很久了,近来每个新版本也都在推进异步的支持,现在除了 ORM 不能真正异步,其他的异步支持好了很多了。

决定继续 Django 之后,我又关注了一下官方博客,发现居然都更新到 6.0 了,这次大版本更新,有很多我感兴趣的功能,比如原生支持 WebSocket 和内置异步任务队列,这下一次把两个 Django 生态的重要组件: channels 和 celery 都干掉了😂

关于 Django 6.0 的更多更新内容,我打算后面继续写一篇文章分享。

小结

技术选型没有绝对的对错,只有适合与否。在追求 AI 原生、快速交付的当下,那个曾经被我嫌弃太重的 Django,依然是最值得信赖的伙伴。

如今是一个极度浮躁的时代。没有任何编程基础的人,利用 AI 甚至可以一行代码不写就“生成”出一个像模像样的 Demo 软件。社交媒体上充斥着“AI 取代程序员”的论调,这种环境很容易让我们感到焦虑和迷茫。

Demo 不是产品,生成代码也不等于工程化。 如果你深入看过那些 AI 生成的项目,就会发现 AI 生成的代码像沙堆上的城堡,看似华丽却经不起风浪。

快并不代表好,走得稳才能走得远。 既然 AI 帮我们解决了写代码慢的问题,那我们就应该把精力花在把产品做稳上。

越是在这种时候,我们越需要像 Django 这样成熟、严谨的框架。

它能帮我们把那些天马行空的想法,通过坚实的 ORM、完善的鉴权和稳定的架构,落地成真正可维护、可商用的产品。而不是在零散的技术栈里和 AI 生成的屎山代码搏斗。

在这个充满不确定性的 AI 时代,Django 给了我最需要的确定性。