Python 如何阻止Flask同时提供多条路线?

Python 如何阻止Flask同时提供多条路线?,python,flask,Python,Flask,我有一些路由,如果数据库中不存在某个术语,则应该调用API,然后将其插入数据库,否则,如果存在,则使用数据库中的记录,此逻辑在3个路由之间共享,唯一的区别是如何处理记录,每个路由返回不同的响应 问题是,我通过AJAX异步调用所有这3条路由,当术语不存在时,所有路由从API获取并插入它,从而导致在数据库中设置相同术语3次的不必要行为: 下面是我的一个路由逻辑的样子: @search_bp.route("/search") @login_required def search(): q =

我有一些路由,如果数据库中不存在某个术语,则应该调用API,然后将其插入数据库,否则,如果存在,则使用数据库中的记录,此逻辑在3个路由之间共享,唯一的区别是如何处理记录,每个路由返回不同的响应

问题是,我通过AJAX异步调用所有这3条路由,当术语不存在时,所有路由从API获取并插入它,从而导致在数据库中设置相同术语3次的不必要行为:

下面是我的一个路由逻辑的样子:

@search_bp.route("/search")
@login_required
def search():
    q = request.args["q"]

    data = tweets_coll.find({"query": q.lower()}) # querying record
    if tweets.count() == 0:
        # Means that record does not exist

        get_record_from_api()
        insert_in_db()


    record = get_from_db()

    return response
下面是第二个路线示例:

@search_bp.route("/users")
@login_required
def get_users():
    q = request.args["q"]

    data = tweets_coll.find({"query": q.lower()}) # querying record
    if tweets.count() == 0:
        # Means that record does not exist

        get_record_from_api()
        insert_in_db()


    record = get_from_db()
    # Do some other processing here

    return response
我在其他两条路线中的情况相同(仅记录处理不同)。在我的理解中,这3条路由中的一条将首先被调用,检查记录是否存在,如果它不将其插入数据库,其他路由将执行,并且它将保证相同的记录不会再次被插入,因为它已插入第一条路由,我正在执行相同的检查逻辑


但是很明显,flask同时提供多条路线,我不知道如何让它一次提供一条路线?或者,在运行视图之前,是否有某种方法可以运行该检查和插入?在请求之前我尝试了
,但不幸的是没有成功。

一些数据库支持原子读写操作,因此您可以检查情况是否属实,并在数据库中翻转一点以创建写锁。也许你可以试着用你的db做些类似的事情?或者,也许让一个芹菜工人来处理所有传入的请求?你能将代码发布到你的其他两条路由吗?。从哪里接收请求的路由?是浏览器发出请求吗?一个更简单的解决方案。为什么不在Flask应用程序中存储一组最初为空的
处理记录
。当您收到AJAX请求时,您将正在处理的元素添加到
处理记录集。然后,如果针对同一元素的另一个AJAX请求进入,它可以看到当前正在处理给定的元素。处理完元素后,将其从集合中移除。此外,与此表交互的所有路由都应调用单个函数,该函数将是与db交互的外交官。那个外交官可能在更新你的状态变量的图表中。@duhaime我在MongoDB中使用NoSQL,我不知道这是否可行,我的数据库技能也不是很先进,所以我不明白你的真正意思,我正在寻找一个解决方案,如果可能的话我不认为有办法让Flask“一次一条路线”服务。一种解决方案是创建一个额外的路由来处理插入,而不是在每个路由上处理3次。您的视图可以向浏览器返回True或False,然后,根据响应运行所有3个案例后,您可以对处理插入的视图进行额外的ajax调用。