尝试使用Django和GraphQL进行实践 Part.1
首先
最近我第一次了解到GraphQL。由于我实际上很想先试试看,所以我用Django简单记录了GraphQL的实现方法。
本文中是以本地环境为假设进行编写的,但由于原始源码是通过容器进行利用的,如果您觉得环境配置麻烦的话,请使用容器。
標題解釋
第一部分:初學者的環境搭建和基本寫作方式 ←現在在這裡
第二部分:在GraphQL中实现没有关联的筛选。
第三部分:实现数据的添加、删除和编辑(变更)操作。
环境构建
这是在使用Django创建项目时需要的开门咒语。
% django-admin startproject mysite .
% django-admin startapp graphql_sample
执行以上命令后,请不要忘记更新mysite/settings.py中的INSTALLED_APPS。(我曾经忘记了一小时才找到解决方法)
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles', # GraphQLを使うために追加する
'graphene-django', # GraphQLを使うために追加する
'graphql_sample', # 追加したapp名を追記する
]
# GraphQLを適応させたいスキーマを選択する
GRAPHENE = {
# これから書くschema.pyの場所を追記する
"SCHEMA": "graphql_sample.schema.schema",
}
我们要在URL中添加使用GraphQL的部分。
from django.contrib import admin
from django.urls import path
from graphene_django.views import GraphQLView
urlpatterns = [
path('admin/', admin.site.urls),
# /graphqlでは、GraphQLを使う宣言
path("graphql", GraphQLView.as_view(graphiql=True)),
]
一旦实现仅包含All()的GraphQL。
因为写出所有实现部分很麻烦,所以只提取schema.py。
其他的代码在这里,希望能够作为参考。
import graphene
from graphene_django import DjangoObjectType
from graphql_sample.models import User, Item
class UserType(DjangoObjectType):
class Meta:
model = User
class ItemType(DjangoObjectType):
class Meta:
model = Item
class Query(graphene.ObjectType):
user = graphene.List(UserType, id=graphene.Int())
item = graphene.List(ItemType, id=graphene.Int())
def resolve_user(self, info, **kwargs):
return User.objects.all()
def resolve_item(self, info, **kwargs):
return Item.objects.all()
schema = graphene.Schema(query=Query)
我們也已經創建了樣本資料,請執行以下命令進行初始設定。
% python3 manage.py makemigrations
% python3 manage.py migration
% python3 manage.py loaddata ./graphql_sample/fixtures/test.json
如果出现包含force_text的错误,请尝试以下方法,建议在容器中使用。
https://qiita.com/abemaru/items/b5cdfb136306b3203ca2
如果成功地放入测试数据,就执行runserver,并访问localhost:8080/graphql。
% python3 manage.py runserver
最后
由于全做花费的时间比我想象的多,所以我决定在Part2中认真地写查询。
点击链接查看更多: https://qiita.com/abemaru/items/cc862c548cdec65fa640