ariadne_django是一个用于将Django与ariadne集成的Python库。
项目描述
维护者状态
我们正在寻找新的维护者,之前参与此项目的成员已经去了新的领域,并且可用的空闲时间非常有限。
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' {} \;
本地开发
- 克隆项目
- 设置虚拟环境
- 进行修改
- 本地运行测试等
- 创建 PR
感谢
衷心感谢 Mirumee,他创作了这个模块以及 Ariadne 的原始代码 <3。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。