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

安装

环境要求

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))),
]

Andy
14 声望2 粉丝

不要bug