API-вызовы выполняются дважды с использованием Waitress и Flask - PullRequest
0 голосов
/ 24 декабря 2018

Я создал API, используя Flask.Я следовал заводскому образцу документации Flask - правила и имена будут абстрактными.(__init__.py of my_package)

Завершив пакет и фабричный метод, я импортировал его в другой файл вне пакета и создал небольшой скрипт для запуска сервера официантки (файл server.py)

Все работает, как и ожидалось, но я обнаружил, что каждый раз, когда я делаю запрос к API, он запускается дважды.Этого не может быть, поскольку некоторые маршруты вставляют данные в мою базу данных, и это поведение будет продолжать вводить дубликаты.

Как правильно решить эту проблему?Могу ли я отключить этот двойной ответ?

Я уже пытался установить app.debug и app.use_reloader в False без каких-либо заметных различий.

Я также пытался найти некоторую информацию в документации официанток и Flask, но я мог найти все, что мне помогло.

Заводской метод __init__.py внутри my_package:

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 выполняются дважды за вызов.

1 Ответ

0 голосов
/ 17 июля 2019

У меня недавно была такая же проблема, кажется, что дублирование происходит только когда вы указываете host в serve.Когда вы опускаете хост, он запускается только один раз (это может быть только для localhost, я не проверял это).

Надеюсь, это поможет

...