1. 什么是 DRF?
Django REST Framework 是一个功能强大且灵活的工具包,用于在 Django 中构建 Web API。
它不是框架:它不是一个独立的框架,而是构建在 Django 之上的一系列可重用组件。
它的目的:让你能够快速、轻松地构建 RESTful API,并遵循 Django 的设计哲学(如 DRY 原则)。
它的特点:提供了序列化、视图、路由、认证、权限、限流等一套完整的解决方案,大大减少了构建 API 的重复性工作。
2. 为什么使用 DRF?(它的优势)
强大的序列化器:核心功能之一,可以轻松地将复杂的 Django 模型(QuerySet)序列化为 JSON、XML 等格式,反之亦然(反序列化并进行数据验证)。
丰富的类视图:提供了
APIView
,GenericAPIView
, 以及各种Mixin
,让你可以用很少的代码实现标准的 CRUD 操作。可浏览的 API:开箱即用!DRF 会自动为你的 API 生成一个美观的、可交互的 Web 界面,方便开发人员测试和调试,无需额外工具(如 Postman)。
全面的认证与权限:内置了多种认证方案(Token、Session、JWT 等)和权限控制(IsAuthenticated、IsAdminUser、自定义权限等),保障 API 安全。
极高的灵活性:虽然提供了很多“开箱即用”的功能,但每个组件都可以被轻松地定制和重写,以适应复杂的业务需求。
庞大的社区和生态:作为 Django 生态中最流行的 API 框架,拥有丰富的教程、插件和社区支持。
3. 核心组件与工作流程
要理解 DRF,最重要的是理解它的几个核心组件是如何协同工作的:
a. 序列化器
这是 DRF 的“灵魂”。它负责两件事:
序列化:将模型实例或 QuerySet 转换为 Python 原生数据类型,进而可以轻松地渲染成
JSON
。反序列化:将客户端发送的原始数据(如 JSON)解析并验证,然后转换成复杂的 Django 模型实例。
b. 视图
DRF 提供了多种编写视图的方式,从最灵活到最高效:
APIView:基础类,提供了与 Django 的
View
类类似但更强大的功能(如专门的请求/响应对象、认证、权限检查等)。GenericAPIView + Mixins:通用视图和混合类,提供了常见的操作逻辑(如
.list()
,.create()
,.retrieve()
,.update()
,.destroy()
)。你可以组合它们来快速构建视图。ViewSet:将一组相关的视图逻辑(如 list, create, retrieve, update, delete)组织在一个类中。它通常与路由器(Router)配合使用,自动生成 URL 配置。
c. 路由
使用 DRF 的 Router
可以自动为 ViewSet
生成 URL conf,非常方便。
d. 认证与权限
在 settings.py
中全局配置,或在具体的视图中通过 permission_classes
和 authentication_classes
属性设置。
4. 一个极简的 DRF API 创建流程
安装:
pip install djangorestframework
添加应用:在
settings.py
的INSTALLED_APPS
中添加'rest_framework'
。定义模型:在
models.py
中创建你的数据模型(如Article
)。创建序列化器:在
serializers.py
中创建继承自ModelSerializer
的序列化器类。编写视图:在
views.py
中创建继承自ModelViewSet
的视图集。配置路由:在
urls.py
中使用DefaultRouter
注册视图集。运行服务器:
python manage.py runserver
,访问/api/articles/
即可看到可浏览的 API!