Erro estranho "is_xhr" ao implantar o aplicativo Flask no Heroku

29

Eu tenho um aplicativo de balão que implantei no Heroku, uma das rotas é a seguinte

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
            }
        )

Ao testar esse terminal localmente, não tenho problemas ao enviar solicitações POST e GET para esse terminal. No entanto, quando implanto no Heroku, recebo o seguinte erro:

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'

Eu nunca vi esse erro Request object has no attribute 'is_xhr'antes e só parece estar acontecendo quando implanto no Heroku. Alguma orientação sobre o que eu deveria procurar?

Também não parece haver um problema com a chave json keyword_data- o problema parece limitado a query_resultsqual é uma lista.

Tom Jackson
fonte

Respostas:

39

A Werkzeugbiblioteca (dependência de Flask) recebeu recentemente uma atualização importante (0.16.1 -> 1.0.0) e parece que Flask(<= 0.12.4) não a restringe.

Você tem 2 opções:

  • Permaneça com sua versão atual do Flask e restrinja a versão Werkzeug que é buscada explicitamente em setup.py ou requirements.txt ( werkzeug<1.0) do seu aplicativo

  • Atualize para uma versão recente do Flask (> = 1.0.0), que está funcionando bem com o Werkzeug mais recente

bagerard
fonte
0

Eu também enfrentei esse problema.

Corrigido temporariamente apenas verificando diretamente o cabeçalho da solicitação

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

não tenho certeza se isso ajuda ...

Jing
fonte