使用 Django 的 REST Framework 快速构建 RESTful API

阅读时长 10 分钟读完

前言

REST(Representational State Transfer)是一种架构风格,被广泛运用在构建分布式系统和 web 应用程序中。RESTful API 是基于 REST 架构风格的 API,它以清晰、简单的方式暴露 web 应用程序中的功能和数据。Django REST Framework 是基于 Django 的一个强大的工具包,可以轻松地构建 RESTful API。

在本篇文章中,我们将探讨使用 Django REST Framework 快速构建 RESTful API 的过程。我们将深入了解 RESTful API 的基本概念,构建 API 视图、序列化器、路由和过滤器等方面的知识。我们会使用一个示例项目来演示如何创建 RESTful API,并提供代码以供参考。

什么是 RESTful API?

RESTful API 是一种 web 服务架构,它使用统一的接口设计方式,以资源为中心向客户端提供服务。这些资源可以是任何类型的数据,例如文档、图片、视频等等。

RESTful API 将资源表示为统一资源标识符(Uniform Resource Identifiers,URI),客户端可以通过这些 URI 访问资源。客户端和服务端之间的通信是通过 HTTP 协议完成的,主要使用 GET、POST、PUT 和 DELETE 等方法。

RESTful API 的一个重要概念是状态转移,客户端通过请求服务端实现状态转移。客户端可以向服务端请求一个资源,也可以修改或删除一个资源。

Django REST Framework 的优点

Django REST Framework 是一个强大的工具包,为构建 RESTful API 提供了广泛的支持。下面是一些 Django REST Framework 的优点:

  • Django REST Framework 为你提供了对 HTTP 标准的支持,例如处理 header、cookie 等等。
  • 构建 RESTful API 的标准组件已经在 Django REST Framework 中实现了,例如序列化器、视图、路由、过滤器等等。这些组件使得构建 RESTful API 变得非常简单,避免了从头开始构建的麻烦。
  • Django REST Framework 的文档非常详细,包含了大量的示例和教程。你可以非常快速地上手和学习。

Django REST Framework 快速上手

下面我们将学习如何使用 Django REST Framework 构建 RESTful API。我们将使用一个示例项目演示这个过程。

创建 Django 项目

首先,我们需要创建一个 Django 项目。我们可以使用下面的命令创建一个 myproject 项目:

接着,我们需要给该项目创建一个 app。我们可以使用下面的命令创建一个 myapp 应用:

安装 Django REST Framework

接下来,我们需要安装 Django REST Framework。我们可以使用下面的命令安装 Django REST Framework:

安装完成之后,我们需要将 Django REST Framework 添加到 Django 的 INSTALLED_APPS 中:

构建 API 视图

接下来,我们需要构建 API 视图。API 视图是 Django REST Framework 构建 RESTful API 的核心组件。它定义了 API 的行为和返回结果。

我们可以使用下面的代码定义一个最简单的 API 视图:

这个 API 视图通过继承 rest_framework.views.APIView 来定义。get 方法返回了一个简单的字符串 "Hello World!"。我们可以通过浏览器或 HTTP 客户端访问这个 API 视图,并获取到这个字符串。

定义序列化器

接下来,我们需要定义序列化器。序列化器是 Django REST Framework 的一个非常重要的组件,负责将的 Django Model 转化成 JSON 或 XML 格式的数据。序列化器将 Django Model 转化成数据,而反序列化器则反之,将数据转化成 Django Model。

下面是一个简单的序列化器定义:

在这个示例中,我们为 Blog 模型定义了一个序列化器。BlogSerializer 继承了 rest_framework.serializers.ModelSerializer 类。Meta 类定义了需要序列化的字段信息。这个序列化器指定了 id、name、description 和 created_at 字段需要被序列化。

定义 API 视图类

接下来,我们需要定义一个 API 视图类。API 视图类负责处理 HTTP 请求,并使用序列化器将 Model 实例转化成 JSON 或 XML 格式的数据。下面是一个 API 视图类的示例:

-- -------------------- ---- -------
---- -------------------- ------ -------
---- ----------------------- ------ --------
---- ------------ ------ ----
---- ----------------- ------ --------------

----- ------------------
    --- --------- ---------
        ----- - ------------------
        ---------- - --------------------- ----------
        ------ -------------------------

在这个示例中,我们定义了一个 BlogList 类,继承了 rest_framework.views.APIView 类。get 方法处理 HTTP GET 请求,并返回所有 Blog 模型实例的序列化数据。由于我们需要序列化多个实例,我们在实例化序列化器的时候传入 many=True 参数。

接下来,我们需要在 urls.py 中添加 API 视图的 URL 路由:

这个 URL 路由将请求映射到 BlogList 类的 get 方法,并返回序列化数据。

添加认证和权限

为 API 添加认证和权限非常重要,可以保护 API 不被未经授权的用户访问。Django REST Framework 支持多种不同的认证和权限类型,包括 Basic、Token、Session、OAuth2 等等。

这里,我们添加一个最基本的认证和权限支持,即通过 Token 进行认证和限制用户只能查看博客列表。我们可以使用下面的代码应用这些策略:

-- -------------------- ---- -------
---- -------------- ------ --------------- -----------
---- ------------------------------ ------ ---------------
---- ----------------------- ------ ------------

----- ---------------------------
    ---------------- - -------------------------------------

----- ------------------
    ---------------------- - ------------------------------------
    ------------------ - -----------------------------

    --- --------- ---------
        ----- - ------------------
        ---------- - --------------------- ----------
        ------ -------------------------

在这个示例中,我们定义了一个 TokenAuth 类,继承自 ObtainAuthToken。我们将这个视图添加到 URL 路由中,并将 renderer_classes 设置为默认的渲染器类。

我们还将 TokenAuthentication 添加到 BlogList 视图的 authentication_classes 中,这样用户必须在请求头中提供有效的 Token 才能访问这个 API 视图。我们还在 permission_classes 中将 permissions.IsAuthenticated 添加到权限列表中,这样只有经过认证的用户才能访问资源。

使用过滤器

使用过滤器可以大大提高 RESTful API 的灵活性。Django REST Framework 内置了多种过滤器,包括模糊搜索、范围过滤、排序、分页等等。

下面是一个使用过滤器的示例:

-- -------------------- ---- -------
---- -------------- ------ --------- -------
---- ------------------------- ------ --------------------

----- ---------------------------------------------------
    --------- - --
    --------------------- - -----------
    ------------- - ----

----- -------------------------------
    -------- - ------------------
    ---------------- - --------------
    ---------------- - ----------------------------
    --------------- - ---------------------- -----------------------
    ------------- - -------- --------------
    --------------- - --------------

在这个示例中,我们定义了一个 BlogList 类,继承自 generics.ListAPIView 类。我们设置了 queryset、serializer_class 和 pagination_class,在视图当中设置了搜索过滤器和排序过滤器。

我们定义了一个 StandardResultsSetPagination 类,可以根据 URL 指定的页面大小来分页并显示数据。我们还设置了 search_fields 和 ordering_fields,分别用于搜索和排序数据。

结论

本文中,我们深入讨论了如何使用 Django REST Framework 快速构建 RESTful API。我们了解了 RESTful API 的基本概念,并深入了解了构建 API 视图、序列化器、路由和过滤器的知识。我们的示例代码演示了如何使用 Django 和 Django REST Framework 快速构建 RESTful API,并包含了常用的认证、权限和过滤器模块。

Django REST Framework 可以大大简化构建 RESTful API 的过程,并且提供了广泛的支持。我们希望本文可以帮助你在使用 Django 和 Django REST Framework 时快速构建高质量的 RESTful API。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/677655e06d66e0f9aa1ed45c

纠错
反馈