web2py将参数传递给controler并下载文件

时间:2016-01-23 17:46:04

标签: post download get web2py

我有以下问题

在我的页面上,用户可以选择日期和日期。这个日期将在按钮点击时发送给控制器,这会创建一个excel文件,用户会收到该文件吗?

有什么建议吗?

谢谢

1 个答案:

答案 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的查询字符串从表单传递开始和结束日期的值。您可以选择在提交后删除表单字段。