导读:本期聚焦于小伙伴创作的《Django API怎么写?Django REST framework(DRF)快速入门教程》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Django API怎么写?Django REST framework(DRF)快速入门教程》有用,将其分享出去将是对创作者最好的鼓励。

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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。