在django如何正确的使用graphql

  介绍

这篇文章将为大家详细讲解有关在django如何正确的使用graphql,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

<强>一、开发环境

1, python3.6

2, django2.0

3, window10

<强>二、项目搭建

1,创建一个虚拟空间mkvirtualenv空间名

2,创建一个django项目

3,安装graphql的依赖包

pip安装graphene-django

4,创建一个组件博客

5,把组件博客及graphene_django注入到应用程序中

6,在settings.py中配置mysql数据库连接

<强>三,书写博客的内容

1,在模型。py中写上数据模型

 django。数据库导入模型
  
  #创建您的模型。
  类用户(models.Model):
  name=模型。CharField (max_length=100, verbose_name=安┲髅帧?
  性别=模型。CharField (max_length=6,选择=((& # 39;男性# 39;u # 39;男& # 39;),(& # 39;女# 39;& # 39;女& # 39;)),默认=& # 39;女,,
  verbose_name=& # 39;性别& # 39;)
  create_at=模型。DateTimeField (auto_now_add=True, verbose_name=& # 39;创建时间& # 39;)
  
  类的博客(models.Model):
  title=模型。CharField (max_length=100, verbose_name=& # 39;标题& # 39;)
  用户=模型。ForeignKey(用户、零=True,空白=True> # !/usr/bin/env python
  utf - 8编码:
  
  进口石墨烯
  从graphene_django。类型进口DjangoObjectType
  从用户得进口,博客
  
  类UserType (DjangoObjectType):
  类元:
  模型=用户
  
  类BlogType (DjangoObjectType):
  类元:
  模型=博客
  
  #定义动作约素输入类型
  类UserInput (graphene.InputObjectType):
  name=graphene.String(要求=True)
  性别=graphene.String(需要=True)
  
  类BlogInput (graphene.InputObjectType):
  title=graphene.String(要求=True)
  用户=graphene.Int(要求=True)
  所需内容=graphene.String (=True)
  
  #定义一个创建用户的突变
  类CreateUser (graphene.Mutation):
  # api的输入参数
  类参数:
  user_data=https://www.yisu.com/zixun/UserInput(要求=True)
  
  # api的响应参数
  好吧=graphene.Boolean ()
  用户=graphene.Field (UserType)
  
  # api的相应操作,这里是创造
  def变异(自我,信息,user_data):
  用户=User.objects。创建(name=user_data(“名字”),性别=user_data['性别'])
  好吧=True
  返回CreateUser(用户=用户,ok=好吧)
  
  
  #定义一个创建博客的突变
  类CreateBlog (graphene.Mutation):
  类参数:
  blog_data=BlogInput(需要=True)
  
  博客=graphene.Field (BlogType)
  
  def变异(自我,信息,blog_data):
  #插入到数据库中
  博客=Blog.objects。创建(title=blog_data['标题'],user_id=blog_data(“用户”),内容=blog_data(“内容”))
  返回CreateBlog(博客(博客)
  
  #定义一个查询语句
  类查询(对象):
  all_user=graphene.List (UserType)
  all_blog=graphene.List (BlogType)
  
  def resolve_all_user(自我,信息,* * kwargs):
  #查询所有书的逻辑
  返回User.objects.all ()
  
  def resolve_all_blog(自我,信息,* * kwargs):
  #查询所有标题的逻辑
  返回Blog.objects.all () 

3,在跟目录(和settings.py同级)创建一个项目的总模式。py

进口石墨烯
  进口的书。模式,blog.schema
  
  类查询(blog.schema。查询,graphene.ObjectType):
  #总的模式的查询入口
  通过
  
  类突变(graphene.ObjectType):
  #总的模式的突变入口
  create_user=blog.schema.CreateUser.Field ()
  create_blog=blog.schema.CreateBlog.Field ()
  
  模式=石墨烯。模式(查询=查询,突变=突变)

4,配置url地址

 django。contrib进口管理
  django。网址导入路径
  从graphene_django。视图导入GraphQLView
  从. schema导入模式
  urlpattern=[
  路径(& # 39;管理/& # 39;,admin.site.urls),
  路径(& # 39;graphql/& # 39;, GraphQLView。as_view (graphiql=True,模式=)),
  )

5,生成数据库映射及启动项目,直接在浏览器上访问

<强>四,可以对上面的代码调整

1,把突变也单独定义在各自的模式。py中

 #定义一个总的突变出口
  类突变(graphene.AbstractType):
  create_user=CreateUser.Field ()
  create_blog=CreateBlog.Field () 

2,在总的模式。py中引入类型查询一样的操作

类突变(blog.schema。突变,graphene.ObjectType):
  #总的模式的突变入口
  通过

在django如何正确的使用graphql