我有以下问题
在我的页面上,用户可以选择日期和日期。这个日期将在按钮点击时发送给控制器,这会创建一个excel文件,用户会收到该文件吗?
有什么建议吗?
谢谢
答案 0 :(得分:1)
def excel_file():
form = SQLFORM.factory(Field('start_date', 'date'),
Field('end_date', 'date'))
if form.process(session=None).accepted:
excel_file = create_excel_file(form.vars.start_date, form.vars.end_date)
return response.stream(excel_file, filename='name_of_file.xlsx',
attachment=True)
return dict(form=form)
注意,以上内容在session=None
的调用中设置了.process()
,以禁用_formkey
隐藏字段的使用(否则,您只能提交表单一次,必须手动重新加载页面以进行第二次提交)。这意味着没有CSRF保护,但这不应成为问题,因为表单提交仅用于请求数据而不是进行任何更改。如果您需要CSRF保护,则必须手动实施。
另请注意,excel_file
可以是类文件对象(如StringIO),打开文件对象或表示完整文件路径的字符串。
或者,在浏览器中,您可以通过Javascript添加事件处理程序以捕获按钮单击而不是允许表单发布,使用将创建和提供文件的web2py URL调用window.open()
(您必须通过URL的查询字符串从表单传递开始和结束日期的值。您可以选择在提交后删除表单字段。