Django REST framework(简称DRF)是基于Django构建的REST风格接口开发框架,它提供了序列化、视图集、认证权限等开箱即用的功能,能极大降低Django项目开发API的复杂度。下面我们通过一个图书管理的简单案例,逐步完成DRF的入门实践。
一、环境准备与项目初始化
首先我们需要安装必要的依赖包,确保本地已经安装Python3.6及以上版本,执行以下命令安装Django和DRF:
# 安装Django pip install django # 安装DRF pip install djangorestframework
接着创建一个新的Django项目和应用:
# 创建Django项目 django-admin startproject drf_demo # 进入项目目录 cd drf_demo # 创建图书管理应用 python manage.py startapp book
然后在项目的settings.py中注册DRF和我们的book应用:
# drf_demo/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 注册DRF
'rest_framework',
# 注册我们的图书应用
'book',
]
二、定义数据模型
我们在book应用的models.py中定义图书的基础模型,包含书名、作者、价格和出版时间字段:
# book/models.py
from django.db import models
class Book(models.Model):
# 书名
title = models.CharField(max_length=100)
# 作者
author = models.CharField(max_length=50)
# 价格
price = models.DecimalField(max_digits=10, decimal_places=2)
# 出版时间
publish_time = models.DateField()
def __str__(self):
return self.title
执行数据库迁移命令,将模型同步到数据库:
python manage.py makemigrations python manage.py migrate
三、编写序列化器
序列化器是DRF中负责数据转换的核心组件,能够将模型实例转换为JSON格式,也能将前端传入的JSON数据转换为模型实例。我们在book应用下创建serializers.py文件:
# book/serializers.py
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
# 指定对应的模型
model = Book
# 指定需要序列化的字段,__all__表示所有字段
fields = '__all__'
四、编写视图逻辑
DRF提供了多种视图类,入门阶段我们可以使用APIView来实现简单的增删改查接口,在book应用的views.py中添加以下代码:
# book/views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Book
from .serializers import BookSerializer
class BookView(APIView):
# 获取所有图书列表
def get(self, request):
books = Book.objects.all()
# 多个实例需要设置many=True
serializer = BookSerializer(books, many=True)
return Response(serializer.data)
# 新增图书
def post(self, request):
serializer = BookSerializer(data=request.data)
# 校验数据合法性
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class BookDetailView(APIView):
# 获取单个图书详情
def get(self, request, pk):
try:
book = Book.objects.get(pk=pk)
except Book.DoesNotExist:
return Response({'error': '图书不存在'}, status=status.HTTP_404_NOT_FOUND)
serializer = BookSerializer(book)
return Response(serializer.data)
# 更新图书信息
def put(self, request, pk):
try:
book = Book.objects.get(pk=pk)
except Book.DoesNotExist:
return Response({'error': '图书不存在'}, status=status.HTTP_404_NOT_FOUND)
serializer = BookSerializer(book, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
# 删除图书
def delete(self, request, pk):
try:
book = Book.objects.get(pk=pk)
except Book.DoesNotExist:
return Response({'error': '图书不存在'}, status=status.HTTP_404_NOT_FOUND)
book.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
五、配置路由
首先在book应用下创建urls.py文件,配置应用的路由:
# book/urls.py
from django.urls import path
from . import views
urlpatterns = [
# 图书列表接口
path('books/', views.BookView.as_view()),
# 单个图书操作接口
path('books/<int:pk>/', views.BookDetailView.as_view()),
]
然后在项目的主路由文件drf_demo/urls.py中包含book应用的路由:
# drf_demo/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
# 包含book应用的路由,前缀为api
path('api/', include('book.urls')),
]
六、接口测试
启动Django开发服务器:
python manage.py runserver
我们可以使用Postman或者curl命令测试接口,以下是几个常用接口的测试示例:
- 获取所有图书:GET请求
http://127.0.0.1:8000/api/books/ - 新增图书:POST请求
http://127.0.0.1:8000/api/books/,请求体为JSON格式:{"title":"Django入门教程","author":"张三","price":59.90,"publish_time":"2023-01-01"} - 获取单个图书:GET请求
http://127.0.0.1:8000/api/books/1/ - 更新图书:PUT请求
http://127.0.0.1:8000/api/books/1/,请求体为需要更新的字段 - 删除图书:DELETE请求
http://127.0.0.1:8000/api/books/1/
七、DRF基础扩展说明
上面的示例使用的是APIView,DRF还提供了更简洁的ModelViewSet,可以通过更少的代码实现相同的功能,只需要配合路由的DefaultRouter使用即可。另外DRF还支持认证、权限、限流、分页、过滤等高级功能,后续可以在掌握基础用法后逐步学习。
DjangoREST_frameworkDRFAPI修改时间:2026-06-22 19:49:03