烧瓶文件下载:文件名在会话中持续存在

时间:2019-05-31 20:03:21

标签: python-3.x flask flask-wtforms flask-session

我有一个Flask网站和一个生成Excel文件的网络表单。我遇到的问题是,如果我将用户送回表单以再次提交,则即使在tmp目录中生成了新文件,也会下载具有相同文件名和数据的先前文件。因此,我认为这与我的会话变量有关。

我使用此功能向文件名添加时间戳,以确保文件名唯一:

def rightnow():
    return dt.datetime.now().strftime("%m%d%y%h%m%S%f")

在routes.py中,有下载请求:

@app.route('/download/', methods=['POST','GET'])
def download_file():
    output_file = session.get('new_file', None)
    r = send_file(output_file, attachment_filename=output_file, as_attachment=True)
    return r

这是生成excel文件的脚本的代码:

new_file = 'output_' + rightnow() + '.xlsx'
writer = pd.ExcelWriter('tmp/' + new_file, engine='xlsxwriter')
df.to_excel(writer, sheet_name="data")      
writer.save()
session['new_file'] = 'tmp/' + new_file

模板页面上的下载声明:

<a class="button" href="{{url_for('download_file')}}">Download new data</a>

我有一个与简单javascript绑定的“再次提交”按钮

<button onclick="goBack()">Submit Again</button>
<script>//for "revise search" button
function goBack() {
    window.history.back();
}
</script>

我与session.clear()一起玩过,但没有成功。

当用户单击“再次提交”按钮以删除保存的文件名时,如何删除会话?

编辑:我检查了文件名和会话变量的变量,它们是相同的,并且与下载时分配的文件名不同。例如,该文件被我编写的脚本命名为“ output_May0554733504.xlsx”-我可以在tmp目录中看到它。但是当我去下载文件时,文件名却不同:'output_May0536794357.xlsx'

此其他文件名不是tmp目录中其他文件的名称。我下载的任何文件都是'output_May0536794357.xlsx'。

1 个答案:

答案 0 :(得分:2)

如果session.pop('new_file')不起作用,您可以尝试session.modified = True将更改强加给会话。