django mysql graphql_GraphQL graphene-django 基本使用文档

这篇文档介绍了如何在Django项目中集成graphene-django来构建GraphQL API。通过安装库、配置设置、定义查询和突变类型,你可以创建一个能够获取用户信息并支持用户创建、更新和删除的API。示例代码展示了如何处理用户查询和突变操作。
摘要由CSDN通过智能技术生成

graphene-django 基本使用文档

介绍

一种用于 API 的查询语言

GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。

文档

个人项目应用

模块

pip install graphene-django

使用

INSTALLED_APPS = [

'graphene_django',

]

GRAPHENE = {

'SCHEMA': 'app.schema.schema'

}

urls.py

from graphene_django.views import GraphQLView

from app.schema import schema

path('graphql/', GraphQLView.as_view(graphiql=True, schema=schema)),

app/schema.py

from django.contrib.auth.models import User as Users

from graphene_django import DjangoObjectType

import graphene

# 相关文档 https://passwo.gitbook.io/graphql/index/drf

class UserType(DjangoObjectType):

class Meta:

model = Users

class Query(graphene.ObjectType):

users = graphene.List(UserType)

# List == Field:

# List 返回结果会是遍历所有查询结果

# Field 返回结果只存在单个 (其中可添加参数, ex. pk)

single_user = graphene.Field(UserType, pk=graphene.Int())

# 定义函数名的格式: resolve_字段

# **kwargs 传递参数

# pk: 如果在字段中定义, 则方法参数中必含

def resolve_users(self, info, **kwargs):

return Users.objects.all()

def resolve_single_user(self, info, pk):

return Users.objects.get(id=pk)

class TQuery(Query, graphene.ObjectType):

pass

class CreateUser(graphene.Mutation):

class Arguments:

username = graphene.String(required=True)

info = graphene.Field(UserType)

ok = graphene.Boolean()

def mutate(self, info, **kwargs):

# print(info.context.user, '==当前用户==')

# kwargs 是传递参数中的变量

# user = info.context.user

user_obj = Users(**kwargs)

try:

user_obj.save()

ok = True

except Exception as e:

print(e)

ok = False

return CreateUser(ok=ok, info=user_obj)

class CMutation(object):

create_user = CreateUser.Field()

class UpdateUser(graphene.Mutation):

class Arguments:

username = graphene.String()

pk = graphene.Int(required=True)

info = graphene.Field(UserType)

ok = graphene.Boolean()

def mutate(self, info, **kwargs):

pk = kwargs.get('pk')

user_obj = Users.objects.get(id=pk)

if not user_obj:

return UpdateUser(ok=False)

user_obj.__dict__.update(**kwargs)

user_obj.save()

ok = True

return UpdateUser(ok=ok, info=user_obj)

class UMutation(object):

update_user = UpdateUser.Field()

class DeleteUser(graphene.Mutation):

class Arguments:

pk = graphene.Int()

ok = graphene.Boolean()

def mutate(self, info, **kwargs):

pk = kwargs.get('pk')

user = Users.objects.get(id=pk)

user.delete()

return DeleteUser(ok=True)

class DMutation(object):

delete_user = DeleteUser.Field()

class Mutations(CMutation, UMutation,DMutation,graphene.ObjectType):

pass

schema = graphene.Schema(query=TQuery, mutation=Mutations)

请求

query{

users{

id,

username,

email

}

}

query{

singleUser(pk: 1){

username,

email

}

}

mutation createUser {

createUser (username: "test1") {

info {

id,

},

ok

}

}

mutation updateUser {

updateUser (pk:2,username: "test2") {

info {

id,

},

ok

}

}

mutation deleteUser {

deleteUser (pk:2) {

ok

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值