fullstack GraphQL学习笔记(11)后端开发graphql-python 查询
django将apps视为内容的分隔基础。我们将建立两个app,一个为users,另一个为Links.另一个重要决定是关于数据库。Django开箱即用SQLite - 一个基于文件的数据库 - 您将使用它。在生产系统上,您应该拥有一个更强大的数据库,例如PostgreSQL。
1、创建links app
python manage.py startapp links
2、在links/models中创建一个数据模型
class Link(models.Model):
url = models.URLField()
description = models.TextField(blank=True)
3、最后,配置Django links在文件上使用新的应用程序hackernews/settings.py,增加links
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'graphene_django',
'links',
]
4、创建数据库表
python manage.py makemigrations python manage.py migrate
5、使用django-shell创建两个实例
//打开django shell python manage.py shell //创建两个实例 rom links.models import Link Link.objects.create(url='https://www.howtographql.com/', description='The Fullstack Tutorial for GraphQL') Link.objects.create(url='https://twitter.com/jonatasbaldin/', description='The Jonatas Baldin Twitter')
6、创建你的第一个type和schema
在GraphQL中,Type是一个可能包含多个字段(field)的对象。每个字段都通过解析器(resolver)计算,它返回一个值。类型(tpye)集合称为schema。每个schema都有一个特殊type,称为Query,用于从服务器获取数据,以及用于将数据发送到服务器的Mutation。
创建links/schema.py文件
import graphene
from graphene_django import DjangoObjectType
from .models import Link
class LinkType(DjangoObjectType):
class Meta:
model = Link
class Query(graphene.ObjectType):
links = graphene.List(LinkType)
def resolve_links(self, info, **kwargs):
return Link.objects.all()
LinkType使用了DjangoObjectType创建了type。
Query type使用graphene.ObjectType创建。字段的解析程序创建特殊类型查询,该解析程序links返回所有链接。
创建hackernews/schema.py文件
import graphene
import links.schema
class Query(links.schema.Query, graphene.ObjectType):
pass
schema = graphene.Schema(query=Query)
这里的Query仅仅是继承了前面定义的Query.这样你可以保证每个app当中的schema是独立的。
8、GraphiQL
请注意,使用之前您需要禁用Django CSRF保护
添加GraphiQL.在hackernews/urls.py文件中添加以下内容:
from django.views.decorators.csrf import csrf_exempt
from graphene_django.views import GraphQLView
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
path('graphql/', csrf_exempt(GraphQLView.as_view(graphiql=True))),
]
打开浏览器并访问http://localhost:8000/graphql/。我们现在可以在页面上使用sdl进行查询了。
query {
links {
id
description
url
}
}
浙公网安备 33010602011771号