Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Eve:添加自定义路由,手动更改对象_Python_Mongodb_Rest_Flask_Eve - Fatal编程技术网

Python Eve:添加自定义路由,手动更改对象

Python Eve:添加自定义路由,手动更改对象,python,mongodb,rest,flask,eve,Python,Mongodb,Rest,Flask,Eve,我刚刚开始使用Eve,它非常适合快速运行完整的RESTAPI。然而,我并不完全相信REST在所有情况下都是完美的,例如,我希望有一个简单的向上投票路线,在那里我可以增加一个对象的计数器。如果我手动检索对象,增加计数器,并更新它,我很容易遇到不同步的问题。因此,我想添加一个简单的额外路由,例如/resource/upvote,它将upvote计数增加1并返回对象 我不知道这有多“骇客”,所以如果它超过了顶部,请告诉我。对于一些重要任务,我认为定制路由没有问题,而这些任务需要以RESTful的方式完

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

我不知道这有多“骇客”,所以如果它超过了顶部,请告诉我。对于一些重要任务,我认为定制路由没有问题,而这些任务需要以RESTful的方式完成,工作量太大。我知道我可以把upvotes当作它自己的资源,但我以为我们在做MongoDB,所以我们不要过于依赖关系

这就是我所得到的:

@app.route('/api/upvote/<type>/<id>')
def upvote(type, id):
    obj = app.data.find_one_raw(type, id)
    obj['score'] += 1
@app.route('/api/upvote/'))
def upvote(类型、id):
obj=app.data.find_one_raw(类型,id)
obj['score']+=1
  • 问题1
    find_one_raw
    始终不返回任何值。我想我必须转换id参数?(我正在使用本机MongoDB ObjectId)
  • 问题2如何保存对象?我没有看到像
    save\u raw
  • 问题#3我们能否将整个过程包装在事务或类似事务中,以确保线程安全?(正如你所知道的,我也是MongoDB的新手)
1:
type
恰好是python关键字。你的意思是说像
resource\u type

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

3:显然,在mongodb中没有任何事务可以从线程中看出(正如您所知,我本人是mongodb的新手)

1:
type
恰好是python关键字。你的意思是说像
resource\u type

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


3:显然,mongodb中没有像线程中那样明显的事务(你可以看出,我自己也是mongodb新手)

1。是的,但没关系!您可以在本地覆盖关键字(不建议这样做)。2.酷,谢谢!3.我懂了。。。谢谢你的链接!1.是的,但没关系!您可以在本地覆盖关键字(不建议这样做)。2.酷,谢谢!3.我懂了。。。谢谢你的链接!我不确定如何进行自定义路由,但Eve确实内置了数据完整性和并发控制。因此,尝试更新(修补)已更新的资源时会失败。我不确定如何执行自定义路由,但Eve确实内置了数据完整性和并发控制。因此,尝试更新(修补)已更新的资源时会失败。