Python 如何显示闪烁消息而不在Flask中重新加载页面?
我正在使用Python中的Flask开发一个web应用程序 我的应用程序中有一个小函数,它在后台计算一些值,并通过一条闪烁的消息在网页上显示结果 一切都显示和工作正常,但需要重新加载页面才能获得闪烁的消息 我想在不重新加载页面的情况下显示消息 我听说我可以用js做到这一点,但我不熟悉js 如果您有任何想法或建议,我将不胜感激 我的代码可以更好地描述我正在做的事情 这是我的应用程序和主html文件之间的渲染器Python 如何显示闪烁消息而不在Flask中重新加载页面?,python,flask,Python,Flask,我正在使用Python中的Flask开发一个web应用程序 我的应用程序中有一个小函数,它在后台计算一些值,并通过一条闪烁的消息在网页上显示结果 一切都显示和工作正常,但需要重新加载页面才能获得闪烁的消息 我想在不重新加载页面的情况下显示消息 我听说我可以用js做到这一点,但我不熟悉js 如果您有任何想法或建议,我将不胜感激 我的代码可以更好地描述我正在做的事情 这是我的应用程序和主html文件之间的渲染器 {%macro render_field(field)%} {{field.label
{%macro render_field(field)%}
{{field.label}
{{字段(**kwargs)|安全}
{%if field.errors%}
{%字段中有错误。错误%}
- {{error}}
{%endfor%}
{%endif%}
{%endmacro%}
如果不重新加载页面,就无法通过Python执行此操作。您必须在javascript中执行此操作。我建议CSS样式设置为display:none
和display:block
。这里有一个例子
1) Python代码,这应该放在app.py
或flask.py
文件中
app.route('/flash/<message>')
def flash(message):
return render_template('flash.html', msg=message)
这将使用烧瓶的请求参数。像这样的URL,localhost:80/flash?msg=Hello%20World代码>将发出一条闪烁的消息,说“你好,世界!”。如果要使用此方法,请确保在导入语句中包含import语句,from flask import request
2) Html代码,这是模板文件夹中名为flash.Html
的单独文件
<body>
<h1 id="header">{{ message }}</h1>
<script>
var heading = $("#header");
setInterval(function() {
if (heading.style.display == "block") { heading.style.display = "none"; }
else if (heading.style.display == "none") { heading.style.display = "block"; }
}, 1000);
</script>
</body>
{{message}}
var标题=$(“#标题”);
setInterval(函数(){
如果(heading.style.display==“block”){heading.style.display=“无”;}
else if(heading.style.display==“none”){heading.style.display=“block”}
}, 1000);
设置间隔中的1000
为毫秒。因此,航向将每2秒闪烁一次 以下是关于信息闪现的看法:
有时,在请求完成后向用户提供状态更新是很有用的。这
可能是确认消息、警告或错误。一个典型的例子是当你
将登录表单提交到有错误的网站,服务器通过呈现来响应
再次登录表单,上面有一条消息,通知您您的用户名或
密码无效。
Flask将此功能作为核心功能。示例4-6显示了flash()
函数可用于此目的。
例4-6。hello.py:闪现消息
@app.route('/',方法=['GET','POST'])
def index():
form=Nameform()
if form.validate_on_submit():
old_name=session.get('name'))
如果旧名称不是None和旧名称!=form.name.data:
flash('看起来你已经改名了!')
会话['name']=form.name.data
form.name.data=“”
返回重定向(url_for('index'))
返回render_模板('index.html',form=form,name=session.get('name'))
form=form,name=session.get('name'))
在本例中,每次提交名称时,都会将其与存储的名称进行比较
在用户会话中,该会话将在上次提交
同样的形式。如果两个名称不同,则使用
在发送回客户端的下一个响应上显示的消息
调用flash()
不足以显示消息;用户使用的模板
应用程序需要呈现这些消息。渲染闪现消息的最佳位置是
基本模板,因为这将在所有页面中启用这些消息。烧瓶是一种好东西
get\u flashed\u messages()
函数可用于模板检索消息和
渲染它们,如示例4-7所示。
例4-7。templates/base.html:Flash消息呈现
{%block content%}
{get_Flash_messages()%中的消息为%s}
&时代;
{{message}}
{%endfor%}
{%block页面\内容%}{%endblock%}
{%endblock%}
在本例中,消息是使用引导的警报CSS样式呈现的
消息(一条如图4-4所示)
图4-4。闪现消息
使用循环是因为可能有多条消息排队等待显示,一条等待显示
每次在上一个请求周期中调用flash()
。下次调用此函数时,将不会返回从get\u flashed\u Messages()
检索的消息,
所以闪现的消息只显示一次,然后被丢弃。 您可能想考虑使用。我在Flask的Flash功能中遇到了同样的障碍,Toastr是纯JS。您可以像在代码中使用控制台日志行一样使用它
toastr.info(“这里有一条消息要向您的用户简要展示”)代码>这是一个很好的示例,但是如果在不单击按钮的情况下显示消息,该怎么办?因为在我的应用程序中,我有一个脚本,它可以用人脸识别摄像头对一些动作进行变换,它可以显示消息,比如用户被识别或not@boardrider请不要在帖子中使用图片。而是在堆栈溢出上使用代码功能。这是一个处理消息的好例子。我已经为我的应用程序创建了类似的东西。我的帖子是关于闪烁信息的。这并不能回答问题。问题涉及通过AJAX访问闪存消息。提问者似乎并不熟悉这个术语。这并没有解决手头的问题,因为我在你的例子中理解到,它必须向函数返回值,但如果在我的应用程序中,我必须显示消息并继续阅读脚本,我该怎么办?我不能只发送变量到函数中
<body>
<h1 id="header">{{ message }}</h1>
<script>
var heading = $("#header");
setInterval(function() {
if (heading.style.display == "block") { heading.style.display = "none"; }
else if (heading.style.display == "none") { heading.style.display = "block"; }
}, 1000);
</script>
</body>