2016-01-23 82 views

回答

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添加一个事件处理程序来捕获按钮点击,而不是允许表单发布,请拨打window.open()来创建和提供文件的web2py URL(您必须通过URL的查询字符串从表单中传递开始日期和结束日期的值)。提交后,您可以选择将表单字段填空。

相关问题