Django REST Framework 简介 #
一、什么是Django REST Framework #
Django REST Framework(简称DRF)是一个强大且灵活的工具包,用于构建Web API。它基于Django构建,让开发者能够快速构建RESTful API。
1.1 核心定位 #
text
DRF = Django + RESTful API + 开发者友好
DRF的核心设计理念:
- Web浏览API:提供可视化的API浏览界面
- 认证系统:完善的认证和权限控制
- 序列化:强大的数据序列化系统
- 文档完善:详尽的官方文档和社区支持
1.2 核心特点 #
| 特点 | 说明 |
|---|---|
| 可视化API | 内置Web浏览API界面,方便调试 |
| 认证系统 | OAuth1、OAuth2、JWT等多种认证方式 |
| 序列化 | 支持ORM和非ORM数据源的序列化 |
| 分页 | 多种分页方式开箱即用 |
| 文档 | 自动生成API文档 |
| 浏览器测试 | 可直接在浏览器中测试API |
二、为什么选择DRF #
2.1 与Django的关系 #
DRF与Django的关系:
text
┌─────────────────────────────────────┐
│ Django Web框架 │
├─────────────────────────────────────┤
│ - ORM数据库操作 │
│ - 用户认证系统 │
│ - Admin后台管理 │
│ - URL路由系统 │
└─────────────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ Django REST Framework │
├─────────────────────────────────────┤
│ - 序列化器(Serializer) │
│ - 视图集(ViewSet) │
│ - 路由器(Router) │
│ - 认证与权限 │
│ - 分页系统 │
│ - API文档 │
└─────────────────────────────────────┘
2.2 DRF的优势 #
1. 开发效率高
python
from rest_framework import viewsets
from .models import Article
from .serializers import ArticleSerializer
class ArticleViewSet(viewsets.ModelViewSet):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
几行代码就能实现完整的CRUD API!
2. 内置可视化界面
访问API时自动返回美观的HTML页面:
text
GET /api/articles/
HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"count": 100,
"next": "http://api.example.com/articles/?page=2",
"previous": null,
"results": [...]
}
3. 完善的认证系统
python
# settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
}
2.3 与其他框架对比 #
| 特性 | DRF | Flask-RESTful | FastAPI |
|---|---|---|---|
| 学习曲线 | 中等 | 简单 | 中等 |
| 内置功能 | 丰富 | 基础 | 丰富 |
| ORM集成 | Django ORM | 需手动 | SQLAlchemy |
| API文档 | 自动生成 | 需插件 | 自动生成 |
| 认证系统 | 完善 | 需手动 | 需手动 |
| 性能 | 中等 | 中等 | 高 |
| 类型提示 | 可选 | 无 | 必须 |
三、核心概念 #
3.1 序列化器(Serializer) #
序列化器是DRF的核心,负责复杂数据类型与Python数据类型之间的转换:
python
from rest_framework import serializers
class ArticleSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
title = serializers.CharField(max_length=200)
content = serializers.CharField()
author = serializers.CharField(max_length=100)
created_at = serializers.DateTimeField(read_only=True)
def create(self, validated_data):
return Article.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.title = validated_data.get('title', instance.title)
instance.content = validated_data.get('content', instance.content)
instance.save()
return instance
3.2 视图(Views) #
DRF提供多种视图类型:
text
视图类型层次结构
├── APIView # 基础视图
├── GenericAPIView # 通用视图基类
│ ├── ListAPIView
│ ├── CreateAPIView
│ ├── RetrieveAPIView
│ ├── UpdateAPIView
│ └── DestroyAPIView
└── ViewSet # 视图集
├── ModelViewSet
├── ReadOnlyModelViewSet
└── GenericViewSet
3.3 路由器(Router) #
路由器自动将ViewSet映射到URL:
python
from rest_framework.routers import DefaultRouter
from .views import ArticleViewSet
router = DefaultRouter()
router.register(r'articles', ArticleViewSet)
urlpatterns = router.urls
3.4 请求与响应 #
DRF扩展了Django的请求和响应对象:
python
from rest_framework.response import Response
from rest_framework.views import APIView
class ArticleListView(APIView):
def get(self, request):
articles = Article.objects.all()
serializer = ArticleSerializer(articles, many=True)
return Response(serializer.data)
四、应用场景 #
4.1 移动应用后端 #
DRF非常适合作为移动应用的后端API:
text
移动端应用
│
▼
┌─────────────────┐
│ DRF API服务 │
├─────────────────┤
│ - 用户认证 │
│ - 数据接口 │
│ - 推送服务 │
│ - 文件上传 │
└─────────────────┘
│
▼
┌─────────────────┐
│ 数据库存储 │
└─────────────────┘
4.2 前后端分离项目 #
现代Web开发的主流架构:
text
┌─────────────────┐ ┌─────────────────┐
│ 前端应用 │────▶│ DRF API服务 │
│ (Vue/React) │◀────│ │
└─────────────────┘ └─────────────────┘
4.3 微服务架构 #
作为微服务中的API服务:
python
# 用户服务
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
# 订单服务
class OrderViewSet(viewsets.ModelViewSet):
queryset = Order.objects.all()
serializer_class = OrderSerializer
4.4 第三方API服务 #
构建对外开放的API平台:
python
from rest_framework.decorators import api_view, throttle_classes
from rest_framework.throttling import UserRateThrottle
class OncePerDayUserThrottle(UserRateThrottle):
rate = '100/day'
@api_view(['GET'])
@throttle_classes([OncePerDayUserThrottle])
def api_data(request):
return Response({'data': '...'})
五、DRF生态系统 #
5.1 核心组件 #
| 组件 | 功能 |
|---|---|
| Serializers | 数据序列化与反序列化 |
| Views | 处理HTTP请求 |
| Routers | URL路由映射 |
| Authentication | 用户认证 |
| Permissions | 权限控制 |
| Pagination | 分页处理 |
| Filtering | 数据过滤 |
| Throttling | 请求限流 |
5.2 常用扩展包 #
| 扩展包 | 功能 |
|---|---|
| djangorestframework-simplejwt | JWT认证 |
| drf-spectacular | OpenAPI文档 |
| django-filter | 高级过滤 |
| drf-nested-routers | 嵌套路由 |
| drf-yasg | Swagger文档 |
六、版本演进 #
| 版本 | 发布年份 | 重要特性 |
|---|---|---|
| DRF 3.0 | 2015 | 重构序列化器 |
| DRF 3.5 | 2016 | 改进的OpenAPI支持 |
| DRF 3.10 | 2019 | OpenAPI 3.0支持 |
| DRF 3.12 | 2020 | Django 3.0支持 |
| DRF 3.14 | 2022 | Django 4.0支持 |
| DRF 3.15 | 2024 | Python 3.12支持 |
七、学习路线 #
text
基础阶段
├── DRF安装与配置
├── 序列化器基础
├── 视图基础
└── URL路由
进阶阶段
├── 模型序列化器
├── 通用视图
├── 认证与权限
└── 分页与过滤
高级阶段
├── 视图集与路由器
├── 自定义序列化
├── 性能优化
└── API文档
八、前置知识 #
学习DRF前,建议掌握以下基础知识:
- Python基础:变量、函数、类、装饰器
- Django基础:模型、视图、URL、模板
- HTTP协议:请求方法、状态码、请求头
- REST概念:RESTful API设计原则
- JSON格式:数据交换格式
九、开发环境 #
推荐的开发环境配置:
| 工具 | 推荐选项 |
|---|---|
| Python版本 | 3.8+ |
| Django版本 | 4.2 LTS |
| DRF版本 | 3.15+ |
| 代码编辑器 | VS Code、PyCharm |
| API测试工具 | Postman、curl、httpie |
| 版本控制 | Git |
十、总结 #
Django REST Framework是一个优秀的API框架:
- 开发效率高:快速构建RESTful API
- 功能完善:认证、权限、分页开箱即用
- 文档友好:内置API浏览界面
- 社区活跃:丰富的第三方扩展
选择DRF的理由:
- 已有Django项目需要添加API
- 需要快速构建RESTful服务
- 需要完善的认证和权限系统
- 追求开发效率和代码质量
准备好开始学习DRF了吗?让我们进入下一章,学习如何安装和配置DRF环境!
最后更新:2026-03-28