介绍
这篇文章将为大家详细讲解有关在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