0
A
回答
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的查询字符串从表单中传递开始日期和结束日期的值)。提交后,您可以选择将表单字段填空。
相关问题
- 1. 将参数传递给新控制器
- 2. 将Servlet上下文参数传递给Spring MVC控制器
- 3. 将参数@ html.beginform和下拉列表传递给控制器
- 4. 将文件上传控制作为参数传递给方法
- 5. 将参数传递给用户控制
- 6. 其他参数传递给控制器
- 7. 参数传递给控制器动作
- 8. 不能传递参数给控制器
- 9. 试图传递参数给控制器
- 10. ASP.NET MVC - 传递参数给控制器
- 11. Angularjs:参数传递给控制器
- 12. Web2py:将视图中的变量传递给控制器
- 13. ASP.NET核心中间件将参数传递给控制器
- 14. 将参数从可迭代组件传递给控制器
- 15. Laravel如何将参数传递给控制器中间件
- 16. 将控制值传递给控制器
- 17. Yii将参数传递给控件
- 18. 将控制器传递给angularjs组件
- 19. 笨将数据传递给控制器
- 20. 将数组传递给MVC控制器
- 21. AngularModalService:将数据传递给控制器
- 22. 将数据传递给控制器
- 23. 将数据传递给控制器
- 24. ErrorException传递给控制器控制器参数2 :: __结构()
- 25. 从jQuery函数'$ .ajax'将参数传递给控制器函数
- 26. 从Textinput传递给控制器文件
- 27. 将参数从处理器传递给控制器; VST 3.5
- 28. 将参数传递给路由器的控制器方法
- 29. 将数组参数从控制器传递给Mailable类。 Laravel
- 30. 使用Ninject将参数传递给控制器构造函数