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 以来已被弃用,现在已被禁止