Django 中的 GraphQL 实现 | Graphene 教程

17 Mar 2025 | 6 分钟阅读

GraphQL 是 Facebook 开发的 API 查询语言。它在 API 上应用运行时查询来获取所需数据,而不是加载所有数据。与 Rest API 相比,它优化了 RESTful API 调用。它使客户端或程序员能够精确地询问他们需要什么,并提供 API 中数据的完整描述。

在本教程中,我们将演示 GraphQL Django 框架的工作原理。

引言

GraphQL 通过静态类型模式提供了一种服务器描述数据的标准方式。我们可以进行一个定义我们数据需求的查询,并在响应中获得我们只请求的数据。要获取更多信息,请访问我们的 Python 中的 Graphene。

由于 API 调用次数少,GraphQL 在开发人员中越来越受欢迎,并且被认为是 REST 的替代品。可能会出现这样的问题:既然我们有 REST 并且它在数据交换方面也极其完美,为什么还需要 GraphQL。让我们对 GraphQL 和 REST 进行简要比较。

GraphQL Django 实现

在本节中,我们将详细介绍如何将 Django ORM 中的模型连接到 Graphene 对象类型。我们将使用 graphene 库,它与 GraphQL 和 Python 一起工作。

设置 Django 项目

我们将创建虚拟环境并将其中的所有依赖项安装进去。创建了以下设置。

  • 创建一个名为
  • 名为 school 的 Django 项目必须包含一个名为

请按照以下步骤进行设置。

我们已经构建了项目的设置。现在,我们运行以下命令来首次同步我们的数据库。

让我们继续在数据库中创建表。

定义我们的模型

现在我们在 model.py 文件中创建几个模型。

在 settings.py 文件中将 student 和 graphene_django 添加到 INSTALLED_APPS 中。

#school/settings.py

运行以下命令在数据库中创建表。

创建一些用于测试的数据

我们创建一些示例信息来在 API 上运行查询。首先,我们需要创建一个超级用户。如果您不知道,超级用户负责在管理面板中创建、删除和更新。要创建超级用户,请运行以下命令。

之后,将模型注册到管理面板

#student/admin.py

GraphQL 的实现 - Schema 和 Object Types

我们已经完成了 Django 的基本设置。我们已准备好对我们的 Django 项目进行查询。GraphQL 以图结构而不是层次结构呈现数据。为了实现这一点,我们需要指定每种对象类型,以便 GraphQL 可以在图中表示。

此图还有一个根类型,所有访问都从此开始。下面是 Query 类。

我们将导入 DjangoObjectType 类来为我们的每个 Django 模型创建 GraphQL 类型。它将自动在我们的 Django 模型字段的上下文中定义 GraphQL 字段。

现在创建一个 schema.py 文件,它将包含我们的 Query 模式。

#school/schema.py

我们可以将其视为 urls.py 文件。

测试 GraphQL 查询

在这里,我们需要进行一些配置来运行我们的 GraphQL 服务器,我们可以在其中测试查询。

更新设置

打开 settings.py 文件,只需将 SCHEMA 添加到 GRAPHENE 配置中。

我们也可以使用它的替代方案,即将 schema 传递到 urls 定义中。让我们看下面的实现。

创建 GraphQL 和 GraphiQL 视图

GraphiQL 是一个基于 Web 的集成开发环境,允许我们编写和执行 GraphQL 查询。它与 REST 略有不同,因为 GraphQL 是从单个 URL 访问的。Graphene 的 GraphQLView 视图处理来自此 URL 的请求。

我们创建 GraphQL 端点,并指定 graphiql=True 参数。

如上所述,如果我们不在 settings.py 中指定 Graphene SCHEMA,我们可以将其传递到下面的 URL。

运行 Django 服务器

现在,我们已准备好测试我们构建的 API 并对其执行一些查询。在此之前,请运行以下命令。

访问 http://127.0.0.1:8000/ 并转到 GraphQL 页面。它将显示以下界面。

GraphQL Implementation in Django| Graphene Tutorial

在左侧,我们执行查询,在右侧显示结果。

运行 GraphQL 查询

让我们执行我们的第一个查询。

查询 - 1

输出

{
  "data": {
    "allStudents": [
      {
        "id": "1",
        "name": "Alex",
        "classTeacher": {
          "name": "Pat Cummins"
        }
      },
      {
        "id": "2",
        "name": "Robert",
        "classTeacher": {
          "name": "Pat Cummins"
        }
      },
      {
        "id": "3",
        "name": "Ricky",
        "classTeacher": {
          "name": "David Warner"
        }
      },
      {
        "id": "4",
        "name": "Princy",
        "classTeacher": {
          "name": "Mathew Wade"
        }
      },
      {
        "id": "5",
        "name": "Maria",
        "classTeacher": {
          "name": "David Warner"
        }
      }
    ]
  }
}

恭喜,我们已完成第一个 GraphQL 查询。我们需要使用驼峰式字段名以提高 JavaScript 客户端的兼容性。

我们也可以使用当前模式运行关联查询。这就是为什么 GraphQL 变得越来越流行和强大。

输出

{
  "data": {
    "allStudents": [
      {
        "id": "1",
        "name": "Alex",
        "rollNo": "101"
      },
      {
        "id": "2",
        "name": "Robert",
        "rollNo": "102"
      },
      {
        "id": "3",
        "name": "Ricky",
        "rollNo": "103"
      },
      {
        "id": "4",
        "name": "Princy",
        "rollNo": "104"
      },
      {
        "id": "5",
        "name": "Maria",
        "rollNo": "105"
      }
    ],
    "teacherByName": {
      "id": "2",
      "name": "Mathew Wade"
    }
  }
}

结论

GraphQL 是一个功能强大且流行的工具,集成了 Python,可以非常高效地工作。在本教程中,我们将 Django 模型与 GraphQL 集成。它使我们能够快速开始与服务器协同工作。GraphQL 将很快取代 REST,因为它处理速度很快。