Python 2.7 Python Flask应用程序-文件可以使用';从"目录"发送"x27;但是更新的文件内容不会显示在客户端

Python 2.7 Python Flask应用程序-文件可以使用';从"目录"发送"x27;但是更新的文件内容不会显示在客户端,python-2.7,flask,Python 2.7,Flask,使用python flask开发了一个web应用程序,它具有以下功能: 用户可以输入输入 收到输入后,flask app将执行以下任务:, -登录到VM并执行任务。使用paramiko模块将SSH连接到远程计算机。 -然后将捕获的结果保存到主机中的文本文件中。 -然后使用send_from_directory()将文件发送到客户端 在客户端,用户可以查看输入表单,一旦用户单击generate按钮,flask app就可以执行任务,输出文本文件可以发送到客户端。这里的问题,在客户端看起来像是发生了

使用python flask开发了一个web应用程序,它具有以下功能:

  • 用户可以输入输入
  • 收到输入后,flask app将执行以下任务:, -登录到VM并执行任务。使用paramiko模块将SSH连接到远程计算机。 -然后将捕获的结果保存到主机中的文本文件中。 -然后使用send_from_directory()将文件发送到客户端
  • 在客户端,用户可以查看输入表单,一旦用户单击generate按钮,flask app就可以执行任务,输出文本文件可以发送到客户端。这里的问题,在客户端看起来像是发生了一些缓存,就像服务器端的输出文件被更改一样,更改的客户端不会反映文件的早期内容,而是仍然显示给用户

    下面给出了我的代码片段

    53 #View the results captures.
    54 @app.route("/view")
    55 def view():
    56         return render_template("view.html")
    57 
    58 #Download file.
    59 @app.route('/static/<path:filename>/',methods=['GET','POST'])
    60 def download_file (filename):
    61         try:
    62                 return send_from_directory 
    (directory=static,filename=filename)
    63 
    64         except Exception as e:
    65                 return str(e)
    
    53#查看结果捕获。
    54@app.route(“/视图”)
    55 def view():
    56返回渲染模板(“view.html”)
    57
    58#下载文件。
    59@app.route('/static/',methods=['GET','POST'])
    60 def下载_文件(文件名):
    61尝试:
    62从目录返回发送目录
    (目录=静态,文件名=文件名)
    63
    64例外情况除外,如e:
    65返回街(e)
    
    view.html

     1 <!doctype html>
     2 <html>
     3    <body>
     4         {% with messages = get_flashed_messages() %}
     5          {% if messages %}
     6             <ul>
     7                {% for message in messages %}
     8                <li>{{ message }}</li>
     9                {% endfor %}
    10             </ul>
    11          {% endif %}
    12       {% endwith %}
    13 
    14       <h1>Your result is ready.</h1>
    15       <a href = "/static/bt_output.txt" target="_blank"><button 
      class='btn btn-default'>View Result!</button></a>
    16 
    17 <!--      <p>Do you want to <a href = "{{ url_for('main') }}">
    18            <b>View Result</b></a></p>-->
    19 
    20 
    21    </body>
    22 </html>
    23 
    
    1
    2.
    3.
    4{%with messages=get_flashed_messages()%}
    5{%if消息%}
    6
      7{消息%中消息的百分比} 8
    • {{message}
    • 9{%endfor%} 10
    11{%endif%} 12{%endwith%} 13 你的结果已经准备好了。 15 16 17 19 20 21 22 23
    更新,另一种方法。。。 向Jinja添加时间戳函数(例如在init.py中):

    并将您的HTML更改为:

    <a href="/static/bt_output.txt?time={{ timestamp() }}" target="_blank">
        <button class='btn btn-default'>View Result!</button>
    </a>
    
    
    
    原始答案 您可以使用对任何缓存控制头进行特定于文件/路由的更改,否则应查看服务器设置以获取默认值

    @app.route('/static/<path:filename>/',methods=['GET','POST'])
    def download_file (filename):
        try:
            response = send_from_directory(directory=static,
                                           filename=filename)
            response.cache_control.max_age = 60  # e.g. 1 minute
            return response
    
         except Exception as e:
                 return str(e)
    
    @app.route('/static/',方法=['GET','POST'])
    def下载文件(文件名):
    尝试:
    响应=从目录发送目录(目录=静态,
    文件名=文件名)
    response.cache_control.max_age=60#例如1分钟
    返回响应
    例外情况除外,如e:
    返回str(e)
    

    您还应该查看
    SEND\u FILE\u MAX\u AGE\u DEFAULT

    谢谢您的建议。但是问题仍然没有恢复,我添加了类似
    response.headers['Cache-Control']=“没有缓存,没有存储,必须重新验证”
    response.Cache\u Control.max\u age=0
    response.Cache\u Control.public=True
    。当我们第一次运行应用程序时,输出文件内容正确地显示在客户端,但我们再次给出不同的输入,结果文本文件仍然显示上次运行的内容,在服务器端,我们可以看到输出文本文件正确地更新了,但是从客户端,这一变化不受影响。非常感谢您的支持。
    @app.route('/static/<path:filename>/',methods=['GET','POST'])
    def download_file (filename):
        try:
            response = send_from_directory(directory=static,
                                           filename=filename)
            response.cache_control.max_age = 60  # e.g. 1 minute
            return response
    
         except Exception as e:
                 return str(e)