【问题标题】:Python Eve: Add _id value in auth_field with event hookPython Eve:使用事件挂钩在 auth_field 中添加 _id 值
【发布时间】:2018-05-30 15:48:41
【问题描述】:

我有一个注册端点,其中 POST 请求不需要身份验证,因此在创建帐户时也不会将 AUTH_FIELD 添加到 mongodb 集合中。

由于我还需要此端点的用户限制资源访问权限,我正在尝试使用发布事件挂钩添加该字段:

AUTH_FIELD = 'user_id'

def adduserid(request, payload):
  data = json.loads(payload.get_data().decode('utf-8'))
  setid = data['_id']
  app.data.driver.db['accounts'].update({"username" : username},{"$set": {"user_id": setid}})

app.on_post_POST_accounts += adduserid

我得到一个 KeyError 结果:

File "run.py", line 30, in adduserid
setid = data['_id']
KeyError: '_id'

我感觉我以错误的方式解析此有效负载对象,但我不知道出了什么问题。 也许有更简单的方法来做到这一点?

【问题讨论】:

  • 此资源的public_methodspublic_item_methods 设置如何?
  • public_methods = ['POST'] 此资源允许用户在没有帐户数据的情况下创建帐户

标签: python eve


【解决方案1】:

_id 字段不是有效负载的一部分,但如果您使用 on_inserted_<resource_name> 数据库挂钩,您将可以访问它,因为 eve 在插入数据库之前添加了_id。此处的文档 (http://python-eve.org/features.html#database-event-hooks)

【讨论】:

  • 谢谢,使用 on_inserted_accounts 钩子就可以了! def adduserid(documents): for document in documents: username = document['username'] table = app.data.driver.db['accounts'] user = table.find_one({'username': username}) setid = user['_id'] table.update({"username" : username},{"$set": {"user_id": setid}})
猜你喜欢
  • 1970-01-01
  • 2014-06-23
  • 2018-02-14
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 2012-01-01
相关资源
最近更新 更多