标签: graphene-python

嵌套对象的变异

我正在尝试为"复杂"对象实现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)

python graphql graphene-python

7
推荐指数
1
解决办法
555
查看次数

在 GraphQL 中检索对象 ID

我想知道是否有可能获得一个对象的“原始 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。

python graphql graphene-python

7
推荐指数
2
解决办法
2182
查看次数

石墨烯突变错误,字段必须是映射(dict / OrderedDict)

我开始关注 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),以字段名称作为键或返回此类映射的函数。

python facebook-graph-api graphene-python

7
推荐指数
1
解决办法
6170
查看次数

为什么在graphene-django中中继?

我想知道为什么 Relay 规范在 graphene-django 中?我知道在 graphene-django 中使用中继我们默认获得分页和过滤器。

我的要求是从 React(用于 Web)调用 graphql apis 并使用适用于 Android 和 iOS 的 Apollo 客户端。

  1. 客户端使用具有 Relay 兼容特别是分页(和游标)功能的 graphene-django 编写的 graphql api 会不会有问题?

  2. 如何使用graphene-django支持订阅?

任何帮助将不胜感激。

django graphql graphene-python

7
推荐指数
1
解决办法
1845
查看次数

Auth0 - 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?

我有点不知道它应该如何工作!

django jwt auth0 graphql graphene-python

7
推荐指数
0
解决办法
551
查看次数

类型为 \"CreateUaction\" 的字段 \"createUaction\" 必须有一个子选择。"

这是我第一次使用石墨烯,对它没有很好的掌握。所以基本上是制作一个博客,用户可以在博客上点赞、评论和添加帖子到他最喜欢的,并互相关注。

我为所有用户操作制作了一个单独的模型

  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 graphql graphene-python graphene-django

7
推荐指数
1
解决办法
8211
查看次数

如何使用graphene-django通过GraphQL中的id列表过滤查询?

我正在尝试使用 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)

django-filter graphene-python graphql-python

7
推荐指数
2
解决办法
3825
查看次数

使用 GraphQL 机制,但返回 CSV

普通的 REST API 可能会让您以不同的格式请求相同的数据,并使用不同的Accept标头,例如application/json、 或text/html,或text/csv格式化响应。

但是,如果您使用 GraphQL,则 JSON 似乎是唯一可接受的返回内容类型。但是,我需要我的 API 能够返回 CSV 数据,以供无法理解 JSON 的不太复杂的客户端使用。

如果给定标头,GraphQL 端点返回 CSV 数据是否有意义Accept: text/csv?如果没有,是否有更好的练习方法来做到这一点?

这更多的是一个概念性问题,但我专门使用石墨烯来实现我的 API。它是否提供任何处理自定义内容类型的机制?

csv mime-types graphql graphene-python

7
推荐指数
2
解决办法
9526
查看次数

如何在 Graphene Django 中记录有关 GraphQL 请求的信息?

目前,Django 记录:[16/Dec/2019 13:29:16] "POST /graphql HTTP/1.1" 200 1735对于任何传入的 graphql 请求。我希望能够记录有关传入请求的更多信息(它正在运行哪些查询、突变等)。

有没有标准化的方法来做到这一点,还是我应该编写自己的中间件?

django graphql graphene-python graphene-django

7
推荐指数
0
解决办法
328
查看次数

在新项目中,石墨烯还是草莓?为什么?

哪个库更适合与新的 django 项目集成?

我红色了文档,但仍然不知道每个文档在产品环境中的性能如何或更容易集成。

我之前使用石墨烯与我在工作中所做的一些 Pipefy 代码集成,但我对 graphql 还很陌生,现在不知道我应该走什么路。

python django graphene-python strawberry-graphql

7
推荐指数
1
解决办法
3180
查看次数