web2py 将参数传递给控制器​​并下载文件

web2py pass parameters to controler and download a file

我有以下问题

在我的页面上,用户可以 select 日期从和日期到。该日期将在单击按钮时发送到控制器,这将创建一个 excel 文件并且用户会收到该文件?

有什么建议吗??

谢谢

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 可以是 file-like 对象(例如 StringIO)、打开的文件对象或表示完整文件路径的字符串。

或者,在浏览器中,您可以通过 Javascript 添加事件处理程序来捕获按钮点击,而不是允许表单 post,使用 web2py 调用 window.open() URL 将创建并提供文件(您必须通过 URL 的查询字符串从表单传递开始日期和结束日期的值)。您可以选择在提交后清空表单字段。