别卷了!这款“养老级”框架,才是后端人的顶级体面
当全世界都在追求极致性能时,为什么我又默默装回了它?不是 FastAPI 用不起,而是这套“重装甲”更有性价比。今晚,我们聊聊 Django REST framework 的暴力美学。

破防瞬间:那个被手写 JSON 逼疯的深夜
早安,我是 Lyra。
今天上海的天气有点阴郁,气温只有 4 度,窗外的梧桐树秃得只剩下几根倔强的枝丫。这种天气,如果不来一块刚出炉的肉桂甜甜圈配热美式,简直是对灵魂的虐待。☕️🍩
就在刚才啃甜甜圈的时候,我在技术群里看到一个新入行的小友在哀嚎:“为什么要用框架?我自己写 json.dumps() 难道不香吗?”
我看着屏幕,手里拿着甜甜圈停在半空,嘴角忍不住抽搐了一下。
香?真的很香吗?
我想起了几年前那个不堪回首的项目。那时候年轻气盛,觉得框架都是累赘,非要搞什么“轻量级微内核”。结果呢?为了处理一个简单的用户注册接口,我不得不手动写代码去验证邮箱格式、去判断用户名是否重复、去处理 datetime 对象无法被 JSON 序列化的报错,甚至还得自己写一堆丑陋的 try...except 来捕获数据库异常。
最崩溃的是,当前端跑过来问我:“Lyra,这个接口的返回值为什么有时候是驼峰,有时候是下划线?”那一刻,我看着那一坨意大利面条般的代码,只想把键盘吃下去。
我们总是高估了自己的耐心,却低估了业务逻辑的复杂度。
直到后来,我遇到了 Django REST framework (DRF)。
那一刻的真香定律,就像今早这口甜甜圈一样,甜腻,扎实,充满了罪恶的满足感。它不是那个跑得最快的法拉利,但它是那个能帮你挡住所有枪林弹雨的重型坦克。
暴力美学:DRF 的“重装甲”哲学
在这个言必称“异步”、“高并发”、“微服务”的浮躁年代,DRF 显得像个格格不入的老绅士。
很多人嫌弃它重。没错,它确实重。但它的重,是一种**“暴力美学”**。
1. 降维打击的“可浏览 API” (Browsable API)
这是 DRF 最让竞品(比如 FastAPI)眼红,却很难完美复刻的功能。
当你部署好 DRF 后,访问你的 API 地址,你看到的不是冷冰冰的 JSON 字符串,而是一个全功能的 Web 页面。你可以在这里直接进行 GET、POST、PUT、DELETE 操作。
- 开发者体验拉满:后端改了接口,不需要去 Postman 里改参数,直接甩个链接给前端:“你自己上去点一下试试。”
- 调试神器:权限对不对?过滤器生效没?不用写 curl 命令,点一下按钮全都有。

[图注:这哪里是 API 文档,这分明是后端工程师的“免战牌”。前端再问参数传得对不对,直接把截图甩过去,优雅且致命。]
2. 序列化器 (Serializers):数据的“翻译官”与“安检员”
如果说 View 是大脑,那 Serializer 就是 DRF 的心脏。它不仅负责把 Python 的复杂对象(比如 Django 的 Model 实例、QuerySet)转换成 JSON,更重要的是它负责反序列化。
它能自动处理:
- 数据验证:字段必填、长度限制、唯一性校验……不需要你写一行
if。 - 复杂关系:外键、多对多关系,通过简单的配置就能变成嵌套的 JSON 结构。
这不仅仅是省代码,这是在保命。它强迫你把数据清洗逻辑和业务逻辑分离开来,治好了我多年的代码洁癖强迫症。
抄作业时间:十分钟构建工业级 API
好了,情怀讲完,现在是**“摸鱼指南”**时间。
如果你手头有一个现成的 Django 项目,想快速给移动端或者小程序出接口,别犹豫,DRF 是唯一的真神。
1. 环境准备
假设你已经装好了 Python 3.10+ 和 Django。只需要一行命令:
pip install djangorestframework
别忘了在 settings.py 里把它请进门:
INSTALLED_APPS = [
# ... 你的其他 App
"rest_framework",
]
2. 核心代码块:三步走
我们以最常见的“用户管理”为例。请注意,这里我们要展示的是 DRF 最核心的ViewSets 和 Routers 组合拳。
步骤一:定义序列化器 (serializers.py)
from django.contrib.auth.models import User
from rest_framework import serializers
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ['url', 'username', 'email', 'is_staff']
步骤二:定义视图集 (views.py)
from django.contrib.auth.models import User
from rest_framework import viewsets
from .serializers import UserSerializer
class UserViewSet(viewsets.ModelViewSet):
"""
允许用户查看或编辑的 API 端点。
"""
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
步骤三:自动路由 (urls.py)
from django.urls import path, include
from rest_framework import routers
from . import views
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
urlpatterns = [
path('', include(router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
3. 代码显微镜 (Lyra 的独家批注) 🔬
咱们不能只扔代码不讲道理。来,拿好放大镜,这几行代码里全是细节:
HyperlinkedModelSerializer: 注意到了吗?我用的不是普通的ModelSerializer。这个高级货会自动把外键关系变成 URL 链接(比如"url": "http://.../users/1/"),而不是干巴巴的 ID。这完全符合 RESTful 的 HATEOAS 原则(虽然名字很难读,但很高级)。这意味着前端顺着链接就能爬取整个 API 图谱,非常优雅。viewsets.ModelViewSet: 这是一个魔法盒子。你只写了两行代码,但它背地里帮你实现了:list(列表),create(创建),retrieve(详情),update(更新),partial_update(局部更新),destroy(删除)。一共 6 个接口!如果你手写,至少得 100 行代码起步。router.register: 这是路由自动生成的逻辑。它会根据 ViewSet 里的动作,自动帮你生成/users/和/users/{id}/的 URL 规则。从此告别写re_path正则表达式的噩梦。
4. 避坑指南 (Lyra 亲测踩雷) 💣
作为过来人,必须告诉你们两个新手最容易掉进去的坑,希望能帮你们今晚准时下班:
- 坑一:CSRF 的幽灵
如果你在浏览器里测试 POST 请求一切正常,但用 Postman 或者前端调用时报错403 Forbidden: CSRF token missing,别慌。这是因为 DRF 默认使用了SessionAuthentication。
解法:在生产环境的 API 设置中,通常需要配置TokenAuthentication或JWT,并把 Session 认证仅用于开发调试。 - 坑二:N+1 查询的诅咒
当你序列化一个包含外键的对象列表时(比如文章列表包含作者信息),DRF 默认会傻傻地遍历每一篇文章去查询一次作者表。100 篇文章就是 101 次查询,数据库直接炸裂。
解法:在get_queryset方法中,务必使用select_related或prefetch_related。# ❌ 错误示范 queryset = Article.objects.all() # ✅ 正确示范 (数据库狂喜) queryset = Article.objects.select_related('author').all()
人间清醒:在 FastAPI 横行的时代,它凭什么活着?
既然 FastAPI 那么快,代码那么现代化(Type Hints),我们为什么还要抱着 DRF 不放?
因为“快”不仅仅是指运行速度,更是指“交付速度”。
如果你的项目已经深度绑定了 Django 的 ORM,或者你需要利用 Django Admin 快速构建后台管理系统,那么 DRF 是无可替代的。
- 生态位差异:FastAPI 是特种兵,适合微服务、高并发、AI 推理接口,拿着冲锋枪突突突。DRF 是集团军,适合构建复杂的企业级业务系统、SaaS 平台、内容管理系统。
- 安全性:DRF 经过了十几年的打磨,各种边缘情况(Edge Cases)、安全漏洞都已经修补得差不多了。它的权限系统(Permissions)粒度之细,简直令人发指。对于金融、政企类项目,“稳”就是最大的“快”。
它不是银弹。它有历史包袱,它在 async 支持上步履蹒跚。但在 2026 年的今天,当你需要构建一个这就需要上线、这就需要鉴权、这就需要管理后台的项目时,它依然是那个最值得信赖的常数。
写在最后:致那些“守旧”的代码手艺人
写到这里,我的甜甜圈已经吃完了,手指上还沾着糖霜。
在这个技术迭代快得像翻书一样的时代,我们很容易陷入一种“版本焦虑”。看到这就想学,看到那也被安利。但真正的高手,往往不是那些精通所有新框架的人,而是那些知道在什么场景下,用什么工具最趁手的人。
DRF 就像家里那口用了十年的铸铁锅。它不粘涂层可能脱落了,它很沉,单手颠不动。但你知道,只要把它架在火上,它就能炖出一锅最入味、最软烂的红烧肉。
这种踏实感,是任何轻量级框架都给不了的。
最后聊聊:
在你的技术栈里,有没有哪一款工具,虽然老旧、笨重,但你依然舍不得把它换掉?
评论区里,咱们从诗词歌赋聊到 StackOverflow。
我是 Lyra,咱们下期见。✨
📚 引用与项目地址 (References)
- 项目官网: Django REST framework
- GitHub 地址: encode/django-rest-framework
- 文中代码参考: DRF Quickstart Guide
- 徽章数据来源: GitHub Actions & Codecov
更多推荐
所有评论(0)