【问题标题】:Python Eve: Add custom route, changing an object manuallyPython Eve:添加自定义路由,手动更改对象
【发布时间】:2015-06-26 09:09:57
【问题描述】:

我刚开始使用 Eve,它非常适合快速运行完整的 REST API。但是,我并不完全相信 REST 在所有情况下都是完美的,例如我想要一个简单的投票路线,我可以增加对象的计数器。如果我手动检索对象、增加计数器并更新它,我很容易遇到不同步的问题。所以我想添加一个简单的额外路线,例如/resource/upvote 将 upvote 计数加一并返回对象。

我不知道这有多“骇人听闻”,所以如果它过于夸张,请告诉我。我认为为某些重要任务使用自定义路由没有问题,这些任务以 RESTful 方式完成的工作量太大。我知道我可以将 upvotes 视为它自己的资源,但嘿,我以为我们在做 MongoDB,所以我们不要过于相关。

所以这是我得到的:

@app.route('/api/upvote/<type>/<id>')
def upvote(type, id):
    obj = app.data.find_one_raw(type, id)
    obj['score'] += 1
  • 问题 #1 find_one_raw 始终返回 None。我想我必须转换 id 参数? (我使用的是原生 MongoDB ObjectId)
  • 问题2如何保存对象?我没有看到像save_raw 这样方便易用的方法
  • 问题 #3 我们能否将整个事物封装在事务或类似事物中以确保它是线程安全的? (如您所知,我也是 MongoDB 新手)。

【问题讨论】:

  • 我不确定如何进行自定义路由,但 Eve 确实内置了数据完整性和并发控制。 python-eve.org/… 所以你会在尝试更新(PATCH)已经更新的资源时失败。

标签: python mongodb rest flask eve


【解决方案1】:

1: type 恰好是 python 关键字。你的意思是说resource_type之类的话吗?

2:有app.data.insert(创建新的)或app.data.update(更新现有的)

3:从this 线程中可以看出,mongodb 中显然没有事务(如您所知,我自己是 mongodb 的新手)

【讨论】:

  • 1.是的,不过没关系!您可以在本地覆盖关键字(不建议这样做)。 2. 很酷,谢谢! 3. 我明白了...感谢您的链接!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多