GraphQL 是一种用于 API 的查询语言和运行时环境,它提供了一种更高效、强大和灵活的方式来获取和传递数据。而 Django 和 Graphene 是两个流行的 Python 库,可以帮助我们轻松地构建 GraphQL API。
本文将介绍如何使用 Django 和 Graphene 构建 GraphQL API,包括安装和配置 Django、安装和配置 Graphene、定义 GraphQL schema、编写 GraphQL resolver 和使用 GraphQL Playground。
安装和配置 Django
首先,我们需要安装 Django。可以通过以下命令来安装:
pip install django
安装完毕后,我们可以创建一个新的 Django 项目:
django-admin startproject myproject
接下来,我们需要创建一个 Django 应用程序:
cd myproject python manage.py startapp myapp
在创建应用程序之后,我们需要将其添加到 INSTALLED_APPS 中:
-- -------------------- ---- ------- - ----------- -------------- - - ----------------------- ---------------------- ------------------------------ -------------------------- -------------------------- ----------------------------- -------- - ------ -
安装和配置 Graphene
接下来,我们需要安装 Graphene。可以通过以下命令来安装:
pip install graphene-django
安装完毕后,我们需要将其添加到 INSTALLED_APPS 中:
-- -------------------- ---- ------- - ----------- -------------- - - ----------------------- ---------------------- ------------------------------ -------------------------- -------------------------- ----------------------------- ------------------ - -- -------- -------- -
接下来,我们需要配置 Graphene。我们需要在 settings.py 中定义 GraphQL schema:
# settings.py GRAPHENE = { 'SCHEMA': 'myapp.schema.schema', }
在这里,我们将 schema 定义为 myapp.schema.schema。我们需要在 myapp 中创建一个名为 schema.py 的文件:
# myapp/schema.py import graphene class Query(graphene.ObjectType): pass schema = graphene.Schema(query=Query)
这里我们创建了一个空的 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