Strano errore "is_xhr" durante la distribuzione dell'app Flask su Heroku


29

Ho un'app di pallone che ho distribuito su Heroku, uno dei percorsi è il seguente

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

Quando testare questo endpoint localmente, non ho problemi durante l'invio di richieste POST e GET a tale endpoint. Tuttavia, quando eseguo la distribuzione su Heroku, ricevo il seguente errore:

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'

Non ho mai visto questo errore Request object has no attribute 'is_xhr'prima e sembra accadere solo quando mi schierò su Heroku. Qualche consiglio su cosa dovrei esaminare?

Inoltre, non sembra esserci un problema con la chiave json keyword_data- il problema sembra limitato a query_resultsquale è un elenco.

Risposte:


39

La Werkzeuglibreria (dipendenza da Flask) ha recentemente ricevuto un aggiornamento importante (0.16.1 -> 1.0.0) e sembra che Flask(<= 0.12.4) non lo limiti.

Hai 2 opzioni:

  • Attenersi alla versione corrente di Flask e limitare la versione di Werkzeug che viene recuperata in modo esplicito in setup.py dell'applicazione o requisito.txt ( werkzeug<1.0) dell'applicazione

  • Esegui l'upgrade a una versione recente di Flask (> = 1.0.0), che funziona correttamente con l'ultimo Werkzeug


0

Ho affrontato anche questo problema.

Risolto solo temporaneamente controllando direttamente l'intestazione della richiesta

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

non sono sicuro che questo aiuto ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.