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
  }
}

  

posted @ 2018-08-28 17:32  tutu_python  阅读(438)  评论(0)    收藏  举报