📌  相关文章
📜  基于类的视图——Django Rest Framework(1)

📅  最后修改于: 2023-12-03 15:37:48.612000             🧑  作者: Mango

基于类的视图——Django Rest Framework

简介

Django Rest Framework (DRF) 是一个用于快速构建 Web API 的框架。它是基于 Django 框架构建的,提供了非常多的工具类和类视图来充分满足 API 开发的需求。

其中,基于类的视图是 DRF 最核心的组件之一。它与传统的函数视图相比,具有更高的代码重用性和可读性,可以大大加快 API 的开发过程。

在本文中,我们将聚焦于介绍 DRF 中的基于类的视图,并深入探讨如何使用它来构建强大的 Web API。

类视图实现原理

DRF 的类视图是基于 Python 类的一种设计模式,它充分利用了面向对象编程(OOP)的优势,使得开发者可以轻松实现数据序列化、请求验证、权限管理等常用功能。

具体来说,DRF 中的类视图由以下几部分组成:

  • ViewSet:负责处理一个或多个 RESTful API 资源的所有操作,如查看、创建、更新、删除等操作。
  • Serializer:用于将查询结果或请求数据转换为可序列化的 Python 数据类型。Serializer 可以深度嵌套,用于支持复杂的数据结构。
  • GenericAPIView:一个抽象的视图类,主要提供了处理 GET/POST 等 HTTP 请求的方法,并与 ViewSet 的方法进行映射。
  • Mixin:用于提供一些常用的功能,如权限控制、分页、过滤等。可以根据需要选择性继承。
  • Permission:定义了用户访问 API 的权限规则,可以根据需求自定义。

通过将以上组件进行组合和继承,开发者可以轻松实现各种复杂的 API 逻辑。下面,我们将通过一个简单的示例来演示如何使用基于类的视图构建 RESTful API。

示例代码

以下是一个简单的 Web API,它提供了对员工信息的创建、更新、删除和查询等操作,使用了 DRF 中的基于类的视图来实现。

urls.py
from django.urls import path, include
from rest_framework import routers
from . import views

router = routers.DefaultRouter()
router.register(r'employees', views.EmployeeViewSet)

urlpatterns = [
    path('', include(router.urls)),
]

以上代码用于定义 API 的路由,并将 EmployeeViewSet 注册到路由中。在这里,我们使用了默认的 routers 类,它可以根据 EmployeeViewSet 的方法自动生成对应的 URL 配置。

serializers.py
from rest_framework import serializers
from .models import Employee

class EmployeeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Employee
        fields = ('id', 'name', 'email', 'department', 'position')

以上代码用于定义 Employee 对象的序列化器,将数据库中的 Employee 实例转换为 JSON 或其他可序列化的数据类型。

views.py
from rest_framework import viewsets
from rest_framework import permissions
from .models import Employee
from .serializers import EmployeeSerializer

class EmployeeViewSet(viewsets.ModelViewSet):
    """
    A simple ViewSet for viewing and editing employees.
    """
    queryset = Employee.objects.all()
    serializer_class = EmployeeSerializer
    permission_classes = [permissions.IsAuthenticated]

以上代码定义了 EmployeeViewSet 类,扩展了 DRF 的 viewsets.ModelViewSet 类。ModelViewSet 包含了针对单个模型实例的 CRUD 操作,如查询、创建、更新和删除。

在 EmployeeViewSet 类中,我们使用了 queryset 和 serializer_class 属性来指定需要查询的数据集和对应的序列化器。permission_classes 属性用于限制 API 的访问权限,这里我们将其设置为需要用户登录后才能访问。

总结

通过使用 DRF 中的基于类的视图,我们可以轻松地构建出各种复杂的 RESTful API。这些类视图不仅具有高度的代码可读性和重用性,而且还提供了很多针对 HTTP 请求处理、权限控制、数据序列化等方面的便利功能。希望本文能够帮助各位程序员更好地掌握 DRF 的基础知识,从而构建出更加优秀的 Web API。