烧瓶/Python:@after_this_request 未被访问

Posted

技术标签:

【中文标题】烧瓶/Python:@after_this_request 未被访问【英文标题】:Flask / Python: @after_this_request is not accessed 【发布时间】:2021-12-15 19:21:41 【问题描述】:

我试图删除我在网络服务上显示后创建的文件。 但是,对于该函数的当前位置,它显示“未访问 remove_file(response)”,当我运行 web 服务时,输出文件时出现错误,因为它显然已被删除。

我不知道该怎么办了,我尝试将 afer_this_request 函数放在 upload_file 声明之后,在返回渲染模板之后,所有这些都不起作用。我快疯了,所以任何帮助都会让我度过愉快的一年!

    @app.route('/', methods=['POST', 'GET'])
    def upload_file():
        if request.method == 'POST':
            myuuid = uuid.uuid4()
            # check if the post request has the file part
            if 'file' not in request.files:
                return render_template('error.html')
            file = request.files['file']
            # If the user does not select a file, the browser submits an
            # empty file without a filename.
            if file.filename == '':
                return render_template('error.html')
    
            if file and allowed_file(file.filename):
                sfilename = secure_filename(file.filename)
                if not os.path.exists(app.config['UPLOAD_FOLDER']):
                    os.mkdir(app.config['UPLOAD_FOLDER'])
                output_path = os.path.join(app.config['UPLOAD_FOLDER'], sfilename)
                file.save(output_path)
    
       
                if 'Alpha Miner' in request.form:
                    Alpha(pro_file, myuuid)
                    img_url = url_for('static', filename=str(myuuid) + '.gv.svg')
    
                    @after_this_request
                    def remove_file(response):
                        os.remove(img_url)
                        return response
                  
                    titel = "Petri Net for Alpha Miner: " + sfilename    
                    return render_template('upload.html', img_url=img_url, titel = title)

【问题讨论】:

不是吗?我用烧瓶导入它:flask.palletsprojects.com/en/2.0.x/api/… 【参考方案1】:

试试这个:

file_handle = open(img_url, 'r')
@after_this_request
    def remove_file(response):
        try:
            os.remove(img_url)
            file_handle.close()
        except Exception as error:
            app.logger.error("Error removing or closing downloaded file handle", error)
        return response

【讨论】:

悲哀地不起作用:(当我将 file_handle 或 img_url 作为参数放入渲染模板时,我仍然收到 filenotfound 错误 请看这个:***.com/questions/24612366/…,这个链接有很好的答案,希望对你有帮助 建议您阅读“流文件,然后删除”部分@icbidt1018

以上是关于烧瓶/Python:@after_this_request 未被访问的主要内容,如果未能解决你的问题,请参考以下文章

将参数从Javascript传递到烧瓶python脚本[重复]

Python - 烧瓶默认路由可能吗?

烧瓶 Python 按钮

python python日志示例(烧瓶)

python字典参数到带有烧瓶模板的JS字典[重复]

如何循环浏览烧瓶/python中的表单?