如何使用 Django 和 Graphene 构建 GraphQL API

阅读时长 7 分钟读完

GraphQL 是一种用于 API 的查询语言和运行时环境,它提供了一种更高效、强大和灵活的方式来获取和传递数据。而 Django 和 Graphene 是两个流行的 Python 库,可以帮助我们轻松地构建 GraphQL API。

本文将介绍如何使用 Django 和 Graphene 构建 GraphQL API,包括安装和配置 Django、安装和配置 Graphene、定义 GraphQL schema、编写 GraphQL resolver 和使用 GraphQL Playground。

安装和配置 Django

首先,我们需要安装 Django。可以通过以下命令来安装:

安装完毕后,我们可以创建一个新的 Django 项目:

接下来,我们需要创建一个 Django 应用程序:

在创建应用程序之后,我们需要将其添加到 INSTALLED_APPS 中:

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

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

安装和配置 Graphene

接下来,我们需要安装 Graphene。可以通过以下命令来安装:

安装完毕后,我们需要将其添加到 INSTALLED_APPS 中:

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

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

接下来,我们需要配置 Graphene。我们需要在 settings.py 中定义 GraphQL schema:

在这里,我们将 schema 定义为 myapp.schema.schema。我们需要在 myapp 中创建一个名为 schema.py 的文件:

这里我们创建了一个空的 Query 类,并将其传递给 graphene.Schema。现在我们可以启动 Django 开发服务器,并访问 http://localhost:8000/graphql/,应该可以看到 GraphQL Playground。

定义 GraphQL schema

接下来,我们需要定义 GraphQL schema。我们可以通过定义 Query 类来实现。假设我们有一个名为 Book 的模型,我们可以像这样定义 Query 类:

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

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

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

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

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

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

在这里,我们首先导入 DjangoObjectType 和 Book 模型。然后我们定义了一个 BookType 类,它继承自 DjangoObjectType,并将其元类设置为 Book 模型。接下来,我们定义了一个名为 books 的字段,并将其类型设置为 graphene.List(BookType)。最后,我们定义了一个名为 resolve_books 的方法,它返回所有的 Book 对象。

编写 GraphQL resolver

现在我们已经定义了 GraphQL schema,接下来我们需要编写 resolver。我们可以使用 Django 的 ORM 来查询数据库,然后将结果返回给 GraphQL。

假设我们有一个名为 Author 的模型,我们可以像这样定义 Query 类:

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

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

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

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

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

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

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

在这里,我们首先导入 Author 模型,并定义了一个 AuthorType 类,它继承自 DjangoObjectType。然后我们定义了一个名为 authors 的字段,并将其类型设置为 graphene.List(AuthorType)。最后,我们定义了一个名为 resolve_authors 的方法,它返回所有的 Author 对象。

使用 GraphQL Playground

现在我们已经定义了 GraphQL schema 和 resolver,接下来我们可以使用 GraphQL Playground 来测试我们的 API。我们可以在 http://localhost:8000/graphql/ 中打开 GraphQL Playground,并使用以下查询来获取所有的书籍和作者:

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

在这里,我们使用了 query 关键字来定义查询。我们分别查询了 books 和 authors 字段,并选择了一些字段来返回。我们还使用了嵌套查询来获取每个书籍的作者姓名。

结论

在本文中,我们介绍了如何使用 Django 和 Graphene 构建 GraphQL API。我们首先安装和配置了 Django 和 Graphene,然后定义了 GraphQL schema 和 resolver,并使用 GraphQL Playground 来测试 API。希望这篇文章对你有所帮助!

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

纠错
反馈