为什么烧瓶石墨烯返回错误id



当我在返回之前打印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.9mongoengine 0.1.9graphene 2.1.8graphene_mongo 0.1.1flask 1.1.1

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

无论如何,它使用base64编码对它们进行编码,要获得真正的值,您可以这个在香草JS:

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

因此,如果你想突变一些东西,并且你有不是bas64编码的ID,你必须做的是:

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

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

最新更新