У меня есть приложение Flask, работающее на Heroku, с python официантским сервером WSGI.
На одной странице 9 Ajax вызовов в одном и том же представлении Flask (каждый вызов с различные параметры) возвращая объект JSON. Представление требует, чтобы пользователь прошел аутентификацию: я использую декоратор @login_required
и расширение прокси-сервера flask *1039* для этого конца.
Flask представление
@dashboard.route('/_dashboard_std_summary', methods=['POST'])
@login_required
def _dashboard_std_summary():
""" Return the data for the dashboard """
param = request.get_json()
# executes a query using the id of the logged in
# user (current_user.id) and some data passed with
# the request, and builds a dict called data
...
return jsonify(success=1,
data=data)
Ajax вызов (один из девяти)
Этот код является частью шаблона, который 9 раз включается на главной странице. widget_field_id
уникален и передается каждому шаблону (возможно, не лучшая архитектура, но он работает локально).
$.ajax({
type: "POST",
headers: {
"X-CSRFToken": "{{ csrf_token() }}"
},
url: "{{ url_for('dashboard._dashboard_std_summary') }}",
data: JSON.stringify({widget_field_id: '{{ widget_field_id }}',
status: '100'
}, null, '\t'),
contentType: "application/json;charset=UTF-8",
dataType: "json",
async: true,
})
.done(function(response){
... do something with the reponse ...
})
Все отлично работает локально на моей машине, но когда я загружаю на Heroku, начинаются проблемы : некоторые из этих вызовов случайно завершаются (я буквально имею в виду это случайно) с кодом 302, и вместо возврата объекта JSON ответ содержит код html страницы входа.
AFAIU, в некоторых (случайных) вызовах пользователь не распознается как аутентифицированный (хотя это происходит в других вызовах), и поток перенаправляется на страницу входа (вот почему я вижу страницу входа html код в ответе).
Если я перезагружаю страницу, не всегда вызовы ajax завершаются неудачно, но когда они это делают, не всегда одни и те же вызовы не выполняются. На следующем изображении вы видите, что 5 из 9 вызовов не состоялись, возвращая 302.
Я уверен, что проблема не в представлении ,
Я схожу с ума от этого. Любые предложения о том, где искать, чтобы определить проблему?