Я использую Python Flask для создания веб-сайта, включая несколько вызовов ajax, которые обновляют индикатор выполнения. Тем не менее, проблема возникает, особенно в Chromium (явно не возникает в firefox, safari или IE).
В Chromium, похоже, постоянно нарастает «мигающий» messages "из диспетчера входа в систему, говоря" Пожалуйста, войдите в систему, чтобы получить доступ к этой странице. ", даже для страниц, которые не используют декоратор @login_required. Вот как это выглядит:
Этот конкретный c снимок был сделан на странице входа, на которой нет декоратора @login_required. Вот функция просмотра:
@bp.route('/login', methods=['GET', 'POST'])
def login():
if current_user.is_authenticated:
return redirect(url_for('main.index'))
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user is None or not user.check_password(form.password.data):
flash('Invalid username or password')
return redirect(url_for('auth.login'))
login_user(user, remember=form.remember_me.data)
next_page = request.args.get('next')
if not next_page or url_parse(next_page).netloc != '':
next_page = url_for('main.index')
return redirect(next_page)
return render_template('auth/login.html', title='Sign In', form=form)
Вот страница входа html:
{% extends 'base.html' %}
{% import 'bootstrap/wtf.html' as wtf %}
{% block app_content %}
<h1 style="color:white">Sign In</h1>
<div class="row" style="color:white">
<div class="col-md-4">
{{ wtf.quick_form(form) }}
</div>
</div>
<br>
<p style="color:white">
Forgot Your Password?
<a href="{{ url_for('auth.reset_password_request') }}">Click to Reset It</a>
</p>
<p style="color:white">New User? <a href="{{ url_for('auth.register') }}">Click to Register!</a></p>
{% endblock %}
А вот «base. html», откуда я подозреваю, что проблема. Вы заметите внизу функцию AJAX, которая обновляется каждую секунду. При запуске страницы эти мигающие поля входа накапливаются, поэтому, когда я обновляю sh страницу через 30 секунд, появляются 30 из этих полей. Когда я обновляю sh страницу через 60 секунд, появляются 60 полей, et c, все с class = "alert alert-info" .
{% block content %}
<div class="container">
{% if current_user.is_authenticated %}
{% with tasks = current_user.get_tasks_in_progress() %}
{% if tasks %}
{% for task in tasks %}
<div class="alert alert-success" role="alert">
{{ task.description }}
<span id="{{ task.id }}-progress"></span>
</div>
{% endfor %}
{% endif %}
{% endwith %}
{% endif %}
{% with messages = get_flashed_messages() %}
{% if messages %}
{% for message in messages %}
<div class="alert alert-info" role="alert">{{ message }}</div>
{% endfor %}
{% endif %}
{% endwith %}
{# application content needs to be provided in the app_content block #}
{% block app_content %}{% endblock %}
</div>
{% endblock %}
{% block scripts %}
{{ super() }}
{{ moment.include_moment() }}
<script>
function set_task_progress(task_id, progress) {
$('#' + task_id + '-progress').text(progress);
}
function set_task_popup (notification_data){
switch(notification_data.progress) {
case 1:
set_task_progress(notification_data.task_id, 'Stage 1')
break;
case 2:
set_task_progress(notification_data.task_id, 'Stage 2')
break;
case 3:
set_task_progress(notification_data.task_id, 'Stage 3')
break;
case 0:
set_task_progress(notification_data.task_id, 'Finished!')
break;
}
}
{% if current_user.is_authenticated %}
$(function() {
var since = 0;
setInterval(function(){
$.ajax('{{ url_for('main.notifications') }}?since=' + since).done(
function(notifications) {
for (var i = 0; i < notifications.length; i++)
{
set_task_popup(notifications[i].data);
since = notifications[i].timestamp;
}})}, 1000);
});
{% endif %}
</script>
{% endblock %}
Мой главный вопрос is - почему это происходит только для Chromium? Это проблема с моим кодом или браузером? Я предполагаю, что первое более вероятно, и если да, как я могу исправить это? Спасибо.