Python 如何显示闪烁消息而不在Flask中重新加载页面?

Python 如何显示闪烁消息而不在Flask中重新加载页面?,python,flask,Python,Flask,我正在使用Python中的Flask开发一个web应用程序 我的应用程序中有一个小函数,它在后台计算一些值,并通过一条闪烁的消息在网页上显示结果 一切都显示和工作正常,但需要重新加载页面才能获得闪烁的消息 我想在不重新加载页面的情况下显示消息 我听说我可以用js做到这一点,但我不熟悉js 如果您有任何想法或建议,我将不胜感激 我的代码可以更好地描述我正在做的事情 这是我的应用程序和主html文件之间的渲染器 {%macro render_field(field)%} {{field.label

我正在使用Python中的Flask开发一个web应用程序

我的应用程序中有一个小函数,它在后台计算一些值,并通过一条闪烁的消息在网页上显示结果

一切都显示和工作正常,但需要重新加载页面才能获得闪烁的消息

我想在不重新加载页面的情况下显示消息

我听说我可以用js做到这一点,但我不熟悉js

如果您有任何想法或建议,我将不胜感激

我的代码可以更好地描述我正在做的事情

这是我的应用程序和主html文件之间的渲染器

{%macro render_field(field)%}
{{field.label}
{{字段(**kwargs)|安全}
{%if field.errors%}

{%字段中有错误。错误%}
  • {{error}}
  • {%endfor%} {%endif%}
    {%endmacro%}
    如果不重新加载页面,就无法通过Python执行此操作。您必须在javascript中执行此操作。我建议CSS样式设置为
    display:none
    display:block
    。这里有一个例子

    1) Python代码,这应该放在app.pyflask.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>