【发布时间】:2021-02-24 08:42:29
【问题描述】:
我有一个小烧瓶应用程序最近开始出现奇怪的行为:闪存消息不会消失(移动到不同的路线时)。它们会再次出现在每一页上。
我了解到显示消息的辅助函数:get_flashed_messages 应该从会话中弹出消息。我使用日志记录测试了它的功能,发现它工作正常:“_flash”消息在调用之前在会话中,而在调用之后不在会话对象上。
然而,当我随后转到新路线时,它们重新出现在会话对象上,并再次显示在页面上。
因此,我确定 jinja2 模板可以访问的会话对象是真实对象的副本,因为它实际上并没有改变我在 app.py 文件中可以访问的那个(我可以正确地改变它) )。
以前有人遇到过这个问题吗?我更新了我的烧瓶和所有烧瓶相关的软件包,但这没有帮助。
这是我的 requirements.py 文件的一部分(所有可能会产生影响的包)。
flask==1.1.2
flask_wtf==0.14.3
flask_cors==3.0.10
jinja2==2.10.3
waitress==1.4.4
Flask-Mobility
secrets==1.0.2
werkzeug==0.16.0
wtforms==2.3.3
这是我的 app.py 文件的开始
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import secrets
import requests
from functools import wraps
from bokeh.embed import server_document, server_session
from bokeh.client.session import pull_session
from bokeh.util.session_id import generate_session_id
from flask import Flask, url_for, render_template, redirect, jsonify, send_from_directory, session, request, flash, Markup
from flask_cors import CORS
from flask_mobility import Mobility
from waitress import serve
app = Flask(__name__)
CORS(app)
Mobility(app)
app.config['SECRET_KEY'] = secrets.token_urlsafe(16)
非常典型的设置。我认为这可能是前端缓存的问题或其他问题,所以我在隐身模式下尝试了它,但它仍然有同样的问题......
当然,前端也没什么特别的:
<article class="flashes">
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul>
{% for message in messages %}
<li class="card" onclick=delete_this(this)>
<a title="remove"><p style="margin: 15px; color: #868A8E; cursor: pointer;">
{{message}}
<i class="small material-icons right">close</i>
</p></a>
</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
</article>
【问题讨论】: