Странная ошибка "is_xhr" при развертывании приложения Flask в Heroku - PullRequest
29 голосов
/ 09 февраля 2020

У меня есть приложение flask, которое я развернул в Heroku, один из следующих маршрутов:

def get_kws():
    seed_kw = request.json['firstParam']
    audience_max = request.json['secondParam']
    interest_mining_service = InterestMiningService(seed_kw, audience_max)
    query_result = interest_mining_service.query_keyword().tolist()
    if seed_kw in query_result:
        print ("yes")
        return jsonify(
            {
             'keyword_data' : interest_mining_service.find_kws().to_json(orient='records'),
             'query_results': query_result
            }
        )

Когда я тестирую эту конечную точку локально, у меня нет проблем при отправке POST и GET запросы к этой конечной точке. Однако при развертывании в Heroku появляется следующая ошибка:

File "/app/server/controller.py", line 24, in get_kws
2020-02-08T22:31:05.893850+00:00 app[web.1]: 'query_results': query_result
2020-02-08T22:31:05.893850+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/json.py", line 298, in jsonify
2020-02-08T22:31:05.893851+00:00 app[web.1]: if current_app.config['JSONIFY_PRETTYPRINT_REGULAR'] and not request.is_xhr:
2020-02-08T22:31:05.893851+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/werkzeug/local.py", line 347, in __getattr__
2020-02-08T22:31:05.893852+00:00 app[web.1]: return getattr(self._get_current_object(), name)
2020-02-08T22:31:05.893858+00:00 app[web.1]: AttributeError: 'Request' object has no attribute 'is_xhr'

Я никогда раньше не видел эту ошибку Request object has no attribute 'is_xhr', и, похоже, она возникает только при развертывании в Heroku. Любое руководство по поводу того, на что мне следует обратить внимание?

Кажется, также нет проблемы с ключом json keyword_data - кажется, проблема ограничена query_results, который является списком.

Ответы [ 2 ]

39 голосов
/ 09 февраля 2020

Библиотека Werkzeug (зависимость от Flask) недавно получила серьезное обновление (0.16.1 -> 1.0.0), и похоже, что Flask (<= 0.12.4) не ограничивает его. </p>

У вас есть 2 варианта:

  • Придерживайтесь текущей версии Flask и ограничьте версию Werkzeug, явно выбранную в setup.py или требованиях вашего приложения. txt (werkzeug<1.0)

  • Обновление до последней версии Flask (> = 1.0.0), которая отлично работает с последней веркой Werkzeug

0 голосов
/ 04 мая 2020

Я тоже сталкивался с этой проблемой.

Просто временно исправлен путем прямой проверки заголовка запроса

request.headers.get("X-Requested-With") == "XMLHttpRequest"

Не уверен, что эта помощь ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...