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 项目我们将创建虚拟环境并将其中的所有依赖项安装进去。创建了以下设置。
请按照以下步骤进行设置。 我们已经构建了项目的设置。现在,我们运行以下命令来首次同步我们的数据库。 让我们继续在数据库中创建表。 定义我们的模型现在我们在 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 查询让我们执行我们的第一个查询。 查询 - 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,因为它处理速度很快。 |
简介 排序是计算机科学中的一项核心操作,其应用范围从信息恢复到增强算法执行。在不同的排序算法中,快速排序因其速度和效率而脱颖而出。然而,快速排序的效率很大程度上取决于枢轴元素的选择。在本文中,我们...
阅读 4 分钟
在本教程中,我们将讨论 Python 的 random 模块中的 uniform() 方法,以及如何通过导入 NumPy 来使用它。uniform() 返回一个介于指定限制之间的浮点数或一个数字范围。使用 uniform() 的语法是- random.uniform(a,b) 这里,“a”...
阅读 4 分钟
Boyer Moore 算法是模式匹配算法中最有效的算法。模式搜索方法在记事本/文字文件、网页浏览器或数据库中查看字符串时显示搜索结果。一种常见的模式搜索技术是 Boyer Moore 字符串搜索技术,具有实际应用。字符串...
阅读 8 分钟
在寻找监控基础设施或第三方应用程序时,Telegraph 的内置插件成为我们的绝佳选择。或者我们正在关注系统资源,如磁盘和网络利用率或 MySQL 数据库的性能。如果我们正在创建一个应用程序...
阅读9分钟
| Airflow Python Operator 在本教程中,我们将学习 Apache Airflow 及其操作符。我们将讨论 Airflow 的所有操作符,但我们的主要目标是探索 Python 操作符以及如何使用它。在深入探讨此主题之前...
阅读 6 分钟
Python 中的语音识别 您是否想过 Google Assistant 或 Amazon Alexa 是如何识别您所说的一切的?您可能会想到一些复杂的智能技术在背后运作。除了在识别系统技术巨大增长的市场中大获成功外,...
阅读 17 分钟
从太空观察太阳系会非常有趣。事实上,为什么不使用 Python 来制作太阳系的视觉描绘呢?在这个项目中,太阳系将使用 Python 进行图形表示。什么是太阳系?地球是其中的一员...
阅读 6 分钟
在本教程中,我们将学习 __repr__() 和 __str__() 方法之间的区别以及何时应使用这些方法。向用户显示数据是计算机程序的常见任务之一。程序向用户显示信息,以便...
阅读9分钟
在本教程中,我们将学习如何使用 Python 读取 HTML 表。我们知道,每天都会产生大量数据,我们需要提取相关信息。互联网是获取相关数据以满足我们需求的绝佳来源,并且...
5 分钟阅读
在本教程中,我们将学习 Python 的 inspect 模块及其函数。它用于检查代码中的对象。众所周知,Python 作为一种面向对象的语言运行,我们的代码围绕这些对象展开,inspect 模块变得很有价值...
7 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India