这个烧瓶应用程序的目标是填充表单,解析生成的表单的数据,启动构建,压缩并将此构建发送给用户。
一切正常,但我希望一旦填写表单,用户就会被重定向到等待页面,如果可能的话。
这是我目前的代码:
def create_and_download_build(form)
# Some parsing in the beginning of the function, the build etc...
os.system('tar -zcvf build.tar.gz dist/')
headers = {"Content-Disposition": "attachment; filename=build.tar.gz"}
with open('build.tar.gz', 'r+b') as data_file:
data = data_file.read()
response = make_response(render_template('waiting.html'), (data, headers))
return response
这是我的_init __。py:
中声明此函数的地方@app.route('/', methods=('GET', 'POST'))
def index():
form = MyForm() # MyForm is a class in which there is some
# wtform field (for example TextField)
if form.validate_on_submit(): # This is called once the form is validated
return create_and_download_build(request.form)
return render_template('index.html', form=form)
它不起作用,我在调用make_response
的行中收到此错误:
AttributeError: 'tuple' object has no attribute 'decode'
如果我将make_response
更改为:response = make_response((data, headers))
,它会正确上传文件,但不会呈现 waiting.html 页面。
如果我将其更改为:response = make_response(render_template('waiting.html'))
,它将呈现模板,但不会下载该文件。
是否有方法同时执行这两项操作?
答案 0 :(得分:3)
简短回答:不。显然,你不能立刻回复不同的回答。
快速而肮脏的解决方案是使用" waiting.html"返回HTML响应。模板,并从此模板添加一些JavaScript以启动下载。
注意这与使用BTW无关,你在任何服务器端语言/技术上都有相同的行为。这就是HTTP的工作方式。