【问题标题】:why flask graphene return wrong id?为什么烧瓶石墨烯返回错误的 ID?
【发布时间】:2020-06-16 13:18:31
【问题描述】:

当我在返回之前打印 id 时,代码会打印正确的值(与 mongo 中的 id 相同)。 但是客户端收到了一个不同的 id。

我的查询代码:

def resolve_account(root, info, **kwargs):
    email = kwargs.get('email', None)
    password = kwargs.get('password', None)
    accounts = AccountModel.objects(email=email, password=password)
    if accounts.first() is None:
        return ResponseMessageField(is_success=False, message="Not found")

    print(accounts[0].id)
    return AccountResults(accounts=[AccountField(id=account.id,
                                                 name=account.name)
                                    for account in accounts])

控制台打印:`5e5f28a41e92b7cdb5cf30ea'

但我的客户收到了:

{
  "data": {
    "accountLogin": {
      "accounts": [
        {
          "name": "test1",
          "id": "QWNjb3VudEZpZWxkOjVlNWYyOGE0MWU5MmI3Y2RiNWNmMzBlYQ=="
        }
      ]
    }
  }
}

python 3.6.9 mongoengine 0.1.9 graphene 2.1.8 graphene_mongo 0.1.1 flask 1.1.1

【问题讨论】:

    标签: python-3.x flask mongoengine graphene-python


    【解决方案1】:

    如果您使用的是自动增量 ID,这实际上是 graphene-django 的一个优势。

    无论如何,它使用 base64 编码对它们进行编码,以获得真正的价值,你可以这样做 这在原版 JS 中:

    >> atob('QWNjb3VudEZpZWxkOjVlNWYyOGE0MWU5MmI3Y2RiNWNmMzBlYQ==')
    >> "AccountField:5e5f28a41e92b7cdb5cf30ea"
    

    所以如果你想改变一些东西,并且你有 ID,它不是 bas64 编码的,你必须做的是:

    >> btoa("AccountField:5e5f28a41e92b7cdb5cf30ea")
    >> "QWNjb3VudEZpZWxkOjVlNWYyOGE0MWU5MmI3Y2RiNWNmMzBlYQ==" 
    

    在 python 中,石墨烯提供了一个导入,to_global_idfrom_global_id 来来回转换 b/w base64 编码值和真实 ID。

    【讨论】:

      猜你喜欢
      • 2020-03-11
      • 2019-01-19
      • 2020-01-08
      • 2017-03-18
      • 2019-09-03
      • 2022-10-25
      • 2021-06-09
      • 2021-03-14
      • 1970-01-01
      相关资源
      最近更新 更多