0

我已经使用 Flask 创建了一个 API。我遵循了 Flask 文档的工厂模式——规则和名称将被抽象出来。(my_package 的 __init__.py)

完成包和工厂方法后,我将其导入到包外的另一个文件中,并创建了一个小脚本来启动女服务员服务器(server.py 文件)

一切都按预期工作,但我检测到每次向 API 发出请求时,它都会运行两次。这不可能发生,因为某些路由将数据插入到我的数据库中,并且此行为将继续输入重复项。

如何正确解决这个问题?我可以禁用此双重响应吗?

我已经尝试将app.debugapp.use_reloader设置为 False,没有任何明显的区别。

我还尝试在 Waitress 和 Flask 文档中找到一些信息,但我可以找到任何对我有帮助的东西。

my_package 中 __init__.py 的工厂方法:

def create_app(test_config=None):
   app = Flask(__name__, instance_relative_config=True)
   app.config.from_object('config')

   @app.route('/route1', methods=['POST', 'PUT'])
   def route1():
      if request.method == 'POST':
        # route logic...
        pass
      elif request.method == 'PUT':
        # route logic...
        pass

   @app.route('/route2', methods=['POST'])
   def route2():
      if request.method == 'POST':
        # route logic...
        pass

   return app

server.py 文件,在 my_package 之外:

import my_package
from waitress import serve

serve(my_package.create_app(), host='0.0.0.0', port=9600)

预期:API 请求每次调用只会运行一次。

实际:每次调用都会运行两次 API 请求。

4

1 回答 1

1

我最近遇到了同样的问题,重复似乎只发生在您在服务中指定主机时。当您省略主机时,它只运行一次(这可能只是本地主机的情况,我没有测试过)。

希望能帮助到你

于 2019-07-17T11:22:25.260 回答