Tengo una aplicación de matraz que he implementado en Heroku, una de las rutas es la siguiente
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 } )Cuando pruebo este punto final localmente, no tengo problemas al enviar solicitudes POST y GET a ese punto final. Sin embargo, cuando implemento en Heroku, aparece el siguiente error:
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' Nunca antes había visto este error Request object has no attribute 'is_xhr' y solo parece estar ocurriendo cuando implemento en Heroku. ¿Alguna orientación sobre lo que debería investigar?
Tampoco parece haber un problema con la clave json keyword_data ; el problema parece estar limitado a query_results que es una lista.
Me he enfrentado a este problema también.
Solo se solucionó temporalmente al verificar directamente el encabezado de la solicitud
request.headers.get("X-Requested-With") == "XMLHttpRequest"no estoy seguro de esta ayuda...
La biblioteca Werkzeug (dependencia de Flask ) recibió recientemente una actualización importante (0.16.1 --> 1.0.0) y parece que Flask (<=0.12.4) no restringe la versión de Werkzeug que se obtiene.
Tienes 2 opciones:
Siga con su versión actual de Flask y restrinja la versión de Werkzeug que se obtiene explícitamente en setup.py o requirements.txt de su aplicación especificando werkzeug<1.0 o werkzeug==0.16.1
Actualice a una versión reciente de Flask (> = 1.0.0), que funciona bien con el último Werkzeug
O simplemente puede instalar a la fuerza la avutarda nuevamente llamando
pip install Werkzeug==0.16.1