我正在尝试为"复杂"对象实现GrapgQL变异.比方说,我们有一个Contact带有三个字段:firstName,lastName并且address,这是一个字段对象street:
这是我的python方案实现:
class Address(graphene.ObjectType):
street = graphene.String(description='Street Name')
class AddressInput(graphene.InputObjectType):
street = graphene.String(description='Street Name', required=True)
class Contact(graphene.ObjectType):
first_name = graphene.String(description='First Name')
last_name = graphene.String(description='Last Name')
address = graphene.Field(Address, description='Contact address')
class ContactInput(graphene.InputObjectType):
first_name = graphene.String(description='First Name', required=True)
last_name = graphene.String(description='Last Name', required=True)
address = AddressInput(description='Contact address', required=True)
class CreateContact(graphene.Mutation):
class Input:
contact = ContactInput()
contact = graphene.Field(Contact, description='Created Contact object')
@staticmethod
def mutate(instance, args, context, info):
contact = Contact(**args['contact'])
return …Run Code Online (Sandbox Code Playgroud) 我想知道是否有可能获得一个对象的“原始 id”作为查询的结果。每当我向服务器发出请求时,它都会返回节点“全局标识符”,类似于U29saWNpdGFjYW9UeXBlOjEzNTkxOA==.
该查询类似于以下查询:
{
allPatients(active: true) {
edges {
cursor
node {
id
state
name
}
}
}
Run Code Online (Sandbox Code Playgroud)
回报是:
{
"data": {
"edges": [
{
"cursor": "YXJyYXljb25uZWN0aW9uOjA=",
"node": {
"id": "U29saWNpdGFjYW9UeXBlOjEzNTkxOA==",
"state": "ARI",
"name": "Brad"
}
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
如何在数据库级别(例如“112”)而不是该节点唯一标识符获取对象的“原始”ID?
ps:我在服务器端使用graphene-python和Relay。
我开始关注 GraphQl/Graphene。我正在构建一个连接到 MongoDB 的模式。到目前为止,除了突变之外,一切似乎都有效。我一直在这里和这里遵循这个例子,但没有运气。有人可以指出我做错了什么吗?提前致谢。
import graphene
class GeoInput(graphene.InputObjectType):
lat = graphene.Float(required=True)
lng = graphene.Float(required=True)
@property
def latlng(self):
return "({},{})".format(self.lat, self.lng)
class Address(graphene.ObjectType):
latlng = graphene.String()
class CreateAddress(graphene.Mutation):
class Arguments:
geo = GeoInput(required=True)
Output = Address
def mutate(self, info, geo):
return Address(latlng=geo.latlng)
class Mutation(graphene.ObjectType):
create_address = CreateAddress.Field()
class Query(graphene.ObjectType):
address = graphene.Field(Address, geo=GeoInput(required=True))
def resolve_address(self, info, geo):
return Address(latlng=geo.latlng)
schema = graphene.Schema(query=Query, mutation=Mutation)
Run Code Online (Sandbox Code Playgroud)
上面的代码生成此错误:
AssertionError: CreateAddress 字段必须是一个映射(dict / OrderedDict),以字段名称作为键或返回此类映射的函数。
我想知道为什么 Relay 规范在 graphene-django 中?我知道在 graphene-django 中使用中继我们默认获得分页和过滤器。
我的要求是从 React(用于 Web)调用 graphql apis 并使用适用于 Android 和 iOS 的 Apollo 客户端。
客户端使用具有 Relay 兼容特别是分页(和游标)功能的 graphene-django 编写的 graphql api 会不会有问题?
如何使用graphene-django支持订阅?
任何帮助将不胜感激。
我目前正在将 Graphql 与 Django Graphene JWT 一起使用。我在后端使用 django。所有请求都由如下所示的令牌进行身份验证:
我有一个为 graphql 创建身份验证令牌的架构,目前看起来像这样:
class Mutation(accounts_manager.schema.Mutation, device_manager.schema.Mutation, graphene.ObjectType):
token_auth = graphql_jwt.ObtainJSONWebToken.Field()
verify_token = graphql_jwt.Verify.Field()
refresh_token = graphql_jwt.Refresh.Field()
Run Code Online (Sandbox Code Playgroud)
我正在尝试查找文档并了解这将如何工作。
我有一个当前连接到 graphql api 的 reactjs webapp,现在我也在构建一个 react 本机应用程序来连接它。
他们的方式我认为 Auth0 只为每个用户保留一个令牌,然后通过 graphql 使用该令牌来验证 django?
我有点不知道它应该如何工作!
这是我第一次使用石墨烯,对它没有很好的掌握。所以基本上是制作一个博客,用户可以在博客上点赞、评论和添加帖子到他最喜欢的,并互相关注。
我为所有用户操作制作了一个单独的模型
class user_actions(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
liked_post = models.ForeignKey(Post, related_name='post_likes',
on_delete=models.CASCADE)
liked_comments = models.ForeignKey(Comment,
related_name='comment_likes', on_delete=models.CASCADE)
fav = models.ForeignKey(Post, related_name='fav_post',
on_delete=models.CASCADE)
target = models.ForeignKey(User, related_name='followers',
on_delete=models.CASCADE, null=True, blank = True)
follower = models.ForeignKey(User, related_name='targets',
on_delete=models.CASCADE, null = True, blank = True)
def __str__(self):
return self.user.username
Run Code Online (Sandbox Code Playgroud)
因此,我对所有操作进行了更改,我正在尝试遵循 DRY 原则并将它们汇总在一起,我可能在这里做错了什么,新编码人员尽我所能:D
class UactionInput(InputObjectType):
liked_post_id = graphene.Int()
fav_post_id = graphene.Int()
comment_id = graphene.Int()
target_id = graphene.Int()
follower_id = graphene.Int()
class CreateUaction(graphene.Mutation):
user = graphene.Field(UactionType)
class Arguments:
input = UactionInput()
def mutate(self, info, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Django 和 Graphene 执行 GraphQL 查询。要使用 id 查询单个对象,我执行了以下操作:
{
samples(id:"U2FtcGxlU2V0VHlwZToxMjYw") {
edges {
nodes {
name
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常。当我尝试使用多个 id 进行查询时出现问题,如下所示:
{
samples(id_In:"U2FtcGxlU2V0VHlwZToxMjYw, U2FtcGxlU2V0VHlwZToxMjYx") {
edges {
nodes {
name
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在后一种情况下,我收到以下错误:
argument should be a bytes-like object or ASCII string, not 'list'
Run Code Online (Sandbox Code Playgroud)
这是如何定义类型和查询的草图 django-graphene
class SampleType(DjangoObjectType):
class Meta:
model = Sample
filter_fields = {
'id': ['exact', 'in'],
}
interfaces = (graphene.relay.Node,)
class Query(object):
samples = DjangoFilterConnectionField(SampleType)
def resolve_sample_sets(self, info, **kwargs):
return Sample.objects.all()
Run Code Online (Sandbox Code Playgroud) 普通的 REST API 可能会让您以不同的格式请求相同的数据,并使用不同的Accept标头,例如application/json、 或text/html,或text/csv格式化响应。
但是,如果您使用 GraphQL,则 JSON 似乎是唯一可接受的返回内容类型。但是,我需要我的 API 能够返回 CSV 数据,以供无法理解 JSON 的不太复杂的客户端使用。
如果给定标头,GraphQL 端点返回 CSV 数据是否有意义Accept: text/csv?如果没有,是否有更好的练习方法来做到这一点?
这更多的是一个概念性问题,但我专门使用石墨烯来实现我的 API。它是否提供任何处理自定义内容类型的机制?
目前,Django 记录:[16/Dec/2019 13:29:16] "POST /graphql HTTP/1.1" 200 1735对于任何传入的 graphql 请求。我希望能够记录有关传入请求的更多信息(它正在运行哪些查询、突变等)。
有没有标准化的方法来做到这一点,还是我应该编写自己的中间件?
哪个库更适合与新的 django 项目集成?
我红色了文档,但仍然不知道每个文档在产品环境中的性能如何或更容易集成。
我之前使用石墨烯与我在工作中所做的一些 Pipefy 代码集成,但我对 graphql 还很陌生,现在不知道我应该走什么路。