前言: 有能力可以自己看官方文档.
安装
环境要求
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))),
]