跳转到主要内容

ariadne_django是一个用于将Django与ariadne集成的Python库。

项目描述

Build Status Codecov

维护者状态

我们正在寻找新的维护者,之前参与此项目的成员已经去了新的领域,并且可用的空闲时间非常有限。

Ariadne

Ariadne是一个用于实现GraphQL服务器的Python库。

  • 模式优先: Ariadne使Python开发者能够使用模式优先方法来实现API。这是GraphQL社区中使用的领先方法,并得到数十种前端和后端开发者工具、示例和学习资源的支持。Ariadne将所有这些立即提供给您和您的团队成员。
  • 简单: Ariadne提供小、一致且易于记忆的API,让开发者能够专注于业务问题,而不是样板代码。
  • 开放: Ariadne被设计成模块化和开放,以便进行自定义。如果您缺少或不满意某些内容,可以扩展或轻松替换为您自己的内容。

文档可在此处找到。

ariadne_django

ariadne_django 设计用于简化将 Ariadne 与 Django 集成的过程。此项目将 Ariadne 0.12 版本的现有代码(在 Mirumee 热情同意下)分离出来,将 django 特定增强功能的发布与 ariadne 的主要发布周期解耦。这使得我们可以响应 Django 和 Ariadne 的需求。

原则

此项目致力于维护 Ariadne 的模式优先方法。我们可能会提供工具,以简化 Django 模型到模式类型的映射(或类似),但不会强制使用。此项目不需要 Django REST 框架,但将提供利用常见 DRF 工具(例如序列化器)的功能,这些工具提供了比 Django 表单更显著的功能和性能提升。

安装

添加到项目

通过 pip 安装

python -m pip install ariadne_django

添加到设置

将 ariadne_django 添加到您项目的 INSTALLED_APPS 设置中(通常位于 settings.py)

INSTALLED_APPS = [
    ...
    "ariadne_django",
]

Ariadne 应用程序提供了一个 Django 模板,用于 GraphQL Playground。请确保您的 Django 项目已配置为从应用程序目录加载模板。这可以通过检查 TEMPLATES 设置中位于 APP_DIRS 选项是否设置为 True 来完成。

TEMPLATES = [
    {
        ...,
        'APP_DIRS': True,
        ...
    },
]

创建可执行模式

在您的项目中某个位置创建一个 Python 模块,用于定义可执行模式。它可能是一个位于您的设置和 urls 旁边的模式模块。

# schema.py
from ariadne import QueryType, make_executable_schema

type_defs = """
    type Query {
        hello: String!
    }
"""

query = QueryType()

@query.field("hello")
def resolve_hello(*_):
    return "Hello world!"

schema = make_executable_schema(type_defs, query)

添加 GraphQL 视图

将 GraphQL 视图添加到项目的 urls.py 中

from ariadne_django.views import GraphQLView
from django.urls import path

from .schema import schema

urlpatterns = [
    ...
    path('graphql/', GraphQLView.as_view(schema=schema), name='graphql'),
]

GraphQLView.as_view() 采用了与 graphql 大多数相同的选项,但有一些差异

  • debug 选项不可用,并将其设置为 settings.DEBUG 的值
  • Django GraphQL 视图支持一些特定于它的额外选项:playground_options,它是用于 GraphQL Playground 的选项字典。

通道

Ariadne 的 ASGI 应用程序可以与 Django Channels 一起使用,以实现具有订阅等功能异步 GraphQL API。

from ariadne.asgi import GraphQL
from channels.http import AsgiHandler
from channels.routing import URLRouter
from django.urls import path, re_path


schema = ...


application = URLRouter([
    path("graphql/", GraphQL(schema, debug=True)),
    re_path(r"", AsgiHandler),
])

目前,Django ORM 不支持异步查询执行,在异步解析器中使用它进行数据库访问时会有明显的性能损失。

为了解决这个问题,您可以在解析器中为数据库查询使用异步 ORM,例如 Gino。

从 ariadne.contrib.django 升级

在您的项目中,将所有对 ariadne.contrib.django 的引用替换为 ariadne_django。

find {path_to_your_project} -type f -name \*.py -exec sed -i 's/ariadne\.contrib\.django/ariadne_django/g' {} \;

本地开发

  1. 克隆项目
  2. 设置虚拟环境
  3. 进行修改
  4. 本地运行测试等
  5. 创建 PR

感谢

衷心感谢 Mirumee,他创作了这个模块以及 Ariadne 的原始代码 <3。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

ariadne_django-0.3.0.tar.gz (15.7 kB 查看哈希值)

上传时间

构建分发

ariadne_django-0.3.0-py3-none-any.whl (18.6 kB 查看哈希值)

上传时间 Python 3

由以下支持