Yebach
Yebach

Reputation: 1691

web2py pass parameters to controler and download a file

I have the following problem

On my page user can select date from and date to. This dates are to be send to controller on button click, which creates an excel file and user receives that file?

Any suggestions ??

Thank you

Upvotes: 0

Views: 219

Answers (1)

Anthony
Anthony

Reputation: 25536

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)

Note, the above sets session=None in the call to .process() in order to disable use of the _formkey hidden field (otherwise, you would only be able to submit the form once and would have to manually reload the page for a second submission). This means there is no CSRF protection, but that shouldn't be a problem here, as the form submission is just being used to request data rather than make any changes. If you need CSRF protection, you will have to implement it manually.

Also, note that excel_file can be a file-like object (such as StringIO), an open file object, or a string representing a full file path.

Alternatively, in the browser, you could add an event handler via Javascript to capture the button click and instead of allowing the form to post, call window.open() with a web2py URL that will create and serve the file (you would have to pass the values of the start and end dates from the form via the query string of the URL). You could optionally blank out the form fields after the submission.

Upvotes: 1

Related Questions