django graphql的持久化查询

django-graphql-persist的Python项目详细描述


PypiWheelBuild StatusCodecovCode Climate

persistend查询用于Django GraphQL

依赖关系

  • django≥1.11
  • python≥3.4

安装

从pypi安装最后一个稳定版本。

pip install django-graphql-persist

middleware设置中包括PersistMiddlewaremiddleware:

MIDDLEWARE=[...'graphql_persist.middleware.PersistMiddleware',...]

装载机

django graphql persist根据您的DEFAULT_LOADER_CLASSES变量,在多个位置搜索文档目录。

默认情况下,django graphql persist使用这些文档加载程序:

  • appdirectoriesloader

从文件系统上的django应用程序加载文档。对于INSTALLED_APPS中的每个应用程序,加载程序将查找由APP_DOCUMENT_DIR变量定义的documents/子目录。

  • filesystemloader

根据DOCUMENTS_DIRS变量从文件系统加载文档。

  • urlloader

根据DOCUMENTS_DIRS,从url加载文档。

GRAPHQL_PERSIST={'DOCUMENTS_DIRS':['/app/documents',# FilesystemLoader'https:// ... /documents',# URLLoader],}

缓存加载程序

默认情况下,文档系统在每次呈现文档时都会读取它们。

配置用于缓存文档的CachedEngine引擎。

GRAPHQL_PERSIST={'DEFAULT_LOADER_ENGINE_CLASS':[graphql_persist.loaders.CachedEngine',],}

持久化查询定义

您可以将架构拆分为单独的文件…

documents/fragments.graphql

fragment userFields on UserType {
  id
  email
}

并定义前缀为#的pythonic导入。

documents/GetViewer.graphql

# from fragments import userFields

{
  viewer {
    ...userFields
  }
}

持久化查询由id

{"id":"GetViewer","variables":{}}

多次操作

documents/users.graphql

# from fragments import userFields

query GetViewer {
  viewer {
    ...userFields
  }
}

query GetUsers($last: Int!) {
  users(last: $last) {
    ...userFields
  }
}

持久化查询由idoperationName

{"id":"users","operationName":"GetUsers","variables":{"last":2}}

版本控制

版本控制方案由DEFAULT_VERSIONING_CLASS设置变量定义。

GRAPHQL_PERSIST={'DEFAULT_VERSIONING_CLASS':'graphql_persist.versioning.AcceptHeaderVersioning'}

这是版本控制类的完整列表

DEFAULT_VERSIONING_CLASSExample
AcceptHeaderVersioning^{tt17}$
VendorTreeVersioning^{tt18}$
QueryParameterVersioning^{tt19}$
HostNameVersioning^{tt20}$

配置版本控制方案,并根据版本存储graphql文档。

示例

POST /graphql HTTP/1.1
Accept: application/json; version=v1.full

{
  "id": "GetViewer",
  "variables": {}
}
documents/
|
├── v1/
│   ├── full/
│   |     └── GetViewer.graphql ?
│   └── basic/
|   |     └── GetViewer.graphql
|   └── fragments/
|         └── users.graphql
└── v2/
    └── full/
    └── basic/

documents/v1/full/GetViewer.graphql

# from ..fragments.users import userFields

{
  viewer {
    ...userFields
  }
}

设置

以下是django graphql persist中可用的设置列表及其默认值。

文档目录

List of directories or urls searched for GraphQL SDL definitions
Default: ()

缓存名称

Cache key name `CACHES[name]` to cache the queries results
Default: 'default'

查询密钥处理程序

A custom function `f(query_id, request)` to generate the persisted query keys
Default: 'graphql_persist.query.query_key_handler'

默认版本控制类

A versioning class to determine the `request.version` attribute
Default: None

默认加载程序引擎类

Class that takes a list of template loaders and attempts to load templates from them in order
Default: 'graphql_persist.loaders.Engine'
Note: Set variable to 'graphql_persist.loaders.CachedEngine' for caching documents

默认加载程序类

A list of loader classes to import documents from a particular source
Default: (
    'graphql_persist.loaders.AppDirectoriesLoader',
    'graphql_persist.loaders.FilesystemLoader',
    'graphql_persist.loaders.URLLoader',
)

app_document_目录

Subdirectory of installed applications for searches documents
Default: 'documents'

文档文本

GraphQL document file extension
Default: '.graphql'

默认渲染器类

A list of renderer classes that may be used when returning a persisted query response
Default: ()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java ArrayOutOfBoundsException与org。日食swt。图样图像数据。布利特   java为什么Hazelcast CacheLoader类需要对所有客户端可见?   如何在java中迭代xml   java概要文件不是工件名称的一部分   java将多个Spring MVC应用程序映射到根Servlet   java SetContentView参数显示错误   java Cucumber类扩展步骤定义和挂钩   java如何动态添加JFace向导页面   amazon web services使用AWS Java SDK通过AWS API网关从S3下载文本文件   Android上的java软键盘   如何在Java中像在C#中一样创建泛型扩展方法?   使用JPA的java多列类型