01#安装-Graphene-Django系统学

Posted Andy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01#安装-Graphene-Django系统学相关的知识,希望对你有一定的参考价值。

前言: 有能力可以自己看官方文档.

安装

环境要求

Django版本大于1.11

安装方法

pip 安装

pip install graphene-django

软件加入Django

Django项目的settings.py的INSTALLED\\_APPS中加入Graphene-Django, 另外要加入静态资源,用于GraphiQL

补充一点:

GraphiQL是GraphQL的集成开发环境(IDE),多了一个i就是integrated(集成,融合)的意思。

INSTALLED_APPS = [
    ...
    "django.contrib.staticfiles", # GraphiQL需要这个静态资源
    "graphene_django"
]

加入路由

Django项目的urls.py加入视图,Django版本不同,用法稍有不同。看起来似乎就是一个正则的区别。

Django 2.0及以上版本

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

urlpatterns = [
    # ...
    path("graphql", GraphQLView.as_view(graphiql=True)),
]

Django 1.11版本:

from django.conf.urls import url
from graphene_django.views import GraphQLView

urlpatterns = [
    # ...
    url(r"graphql", GraphQLView.as_view(graphiql=True)),
]

补充一点,如果你不希望在浏览器中使用GraphiQL,视图里将graphiql的True改为False。

定义方案

定义一个方案(schema),我理解schema为方案。在方案里,你可以指定如何查询(query)和变动(mutate)。我写一个实例:

import graphene
class Query(graphene.ObjectType):
    hello = graphene.String(default_value="Hi!")
schema = graphene.Schema(query=Query)

大概的思路就是: 继承graphene.ObjectType, 定义好你要查询的字段以及数据来源, 最后将定义的查询对象赋值给Schema的query里.

配置方案

方案定义好了, 还需要把方案给到django的配置里, 也就是项目的settings.py

大概长这样:

GRAPHENE = {
    "SCHEMA": "django_root.schema.schema"
}

番外: CSRF保护

在路由urls.py里, 加一层csrf\\_exempt即可.

# urls.py

from django.urls import path
from django.views.decorators.csrf import csrf_exempt

from graphene_django.views import GraphQLView

urlpatterns = [
    # ...
    path("graphql", csrf_exempt(GraphQLView.as_view(graphiql=True))),
]

以上是关于01#安装-Graphene-Django系统学的主要内容,如果未能解决你的问题,请参考以下文章

graphene-django 将 models.BigInteger() 转换为 graphene.Integer()

如何将 Angular/Apollo 客户端与 graphene-django 集成?

界面中包含的 Graphql 类型未添加到 graphene-django 中的模式

在没有中继的情况下使用带有graphene-django的子字段中的参数进行分页

graphene-django:没有“Meta.fields”或“Meta.exclude”的“Meta.model”自 0.15.0 以来已被弃用,现在已被禁止

Graphene-Django 嵌套过滤器(中继)