gpt4 book ai didi

python - 装饰器@after_this_request不工作

转载 作者:行者123 更新时间:2023-12-01 08:20:54 24 4
gpt4 key购买 nike

我正在学习 Flask,所以如果问题看起来很微不足道,请原谅我。我正在构建一个非常简单的应用程序,根据插入表单中的文本生成词云(在 .png 图像中)。问题是我想在将图像提供给用户后将其删除。

我尝试使用 @after_this_request 装饰器,但它似乎不起作用(甚至连你在下面的代码中看到的打印函数也不起作用)。

from flask import Flask, request, render_template, after_this_request
import wordcloud
import time
import os

app=Flask (__name__)

@app.after_request
def add_header (r):
r.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
r.headers["Pragma"] = "no-cache"
r.headers["Expires"] = "0"
return r

@app.route ("/")
def main ():
return render_template ("main.html")

@app.route ("/result", methods=["GET","POST"])
def result ():

ts=str(time.time())

if request.method == "POST":
wc=wordcloud.WordCloud (width=1920, height=1080).generate (request.form["text"])
wc.to_file ("static/wc_"+ts+".png")
return render_template ("result.html", ts=ts)

@after_this_request
def remove_file (response):
print ("Test")
os.remove ("static/wc_"+ts+".png")
return response

app.run ()

我希望这些图像会被删除。我正在 MacOSX 上运行它,如果这可以帮助...

有什么建议吗?提前致谢!

最佳答案

Python 是一种动态语言,因此所有内容都在运行时进行评估。对于要评估的 @after_this_request block ,Python 解释器首先需要到达这些代码行。但是,通过 return render_template ...result 函数的评估完成,并且 @after_this_request 的代码块永远不会到达,也不会评估,就像它从未存在过一样。尝试将此 block 移动到 result 函数的开头。

关于python - 装饰器@after_this_request不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54655069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com