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將參數傳遞給控制器構造函數