Kesalahan “is_xhr” yang aneh saat menggunakan aplikasi Flask ke Heroku

29

Saya memiliki aplikasi labu yang telah saya gunakan untuk Heroku, salah satu rute adalah sebagai berikut

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

Ketika saya menguji titik akhir ini secara lokal, saya tidak memiliki masalah ketika mengirim permintaan POST dan GET ke titik akhir itu. Namun, ketika saya menyebarkan ke Heroku, saya mendapatkan kesalahan berikut:

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'

Saya belum pernah melihat kesalahan ini Request object has no attribute 'is_xhr'sebelumnya dan sepertinya hanya terjadi ketika saya menyebarkan ke Heroku. Adakah petunjuk tentang apa yang harus saya perhatikan?

Tampaknya juga tidak ada masalah dengan kunci json keyword_data- masalah ini tampaknya terbatas pada query_resultsdaftar.

Tom Jackson
sumber

Jawaban:

39

The Werkzeuglibrary (ketergantungan dari Flask) baru-baru ini menerima update besar (0.16.1 -> 1.0.0) dan kelihatannya seperti Flask(<= 0.12.4) tidak membatasi itu.

Anda memiliki 2 opsi:

  • Tetap menggunakan Flask versi Anda saat ini dan batasi versi Werkzeug yang diambil secara eksplisit di setup.py aplikasi Anda atau requirement.txt ( werkzeug<1.0)

  • Tingkatkan ke versi terbaru Flask (> = 1.0.0), yang berjalan baik dengan Werkzeug terbaru

bagerard
sumber
0

Saya juga menghadapi masalah ini.

Hanya sementara diperbaiki dengan langsung memeriksa header permintaan

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

tidak yakin ini membantu ...

Jing
sumber