2016-01-23 31 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的查詢字符串從表單中傳遞開始日期和結束日期的值)。提交後,您可以選擇將表單字段填空。

相關問題