我正在使用cherrypy运行一个交互式网站,虽然生成CSV的python函数似乎正常工作(如果你直接与它进行交互,我的浏览器下载它),它似乎没有给用户这个CSV我将其嵌入表单请求中的文件:
<form id="export_csv_left" action="/c/flex_export_csv" method="get">
<input type="hidden" name="datakey" value="8TZbmRZ54IL7" >
<button type="button">Export stories and data as CSV</button>
</form>
我希望有一个按钮,显示“导出CSV”并返回文件。 该表单生成了对我的cherrypy的请求,如下所示:
djotjog.com/c/flex_export_csv?datakey=8TZbmRZ54IL7
cherrypy部分内的标题是......
csv = make_csv(literal_eval(raw_data), filename)
cherrypy.response.headers['Content-Type'] = "application/x-download"
cherrypy.response.headers['Content-Disposition'] = ('attachment; filename= %s' % (filename,))
return csv
在浏览器中加载该链接会生成CSV。那么表格的内容是什么呢?
以下是我不太了解的一些可能相关的javascript控制台消息:
Denying load of chrome-extension://ganlifbpkcplnldliibcbegplfmcfigp/scripts/vendor/jquery/jquery.min.map. Resources must be listed in the web_accessible_resources manifest key in order to be loaded by pages outside the extension.
如果相关的话。
答案 0 :(得分:1)
你的问题本身与CherryPy无关。只需确保您的表单按钮 type
属性为submit
,而回复content-type
标题为通用application/octet-stream
(或text/csv
)。像这样。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import cherrypy
config = {
'global' : {
'server.socket_host' : '127.0.0.1',
'server.socket_port' : 8080,
'server.thread_pool' : 4
}
}
class App:
@cherrypy.expose
def index(self):
return '''<!DOCTYPE html>
<html>
<body>
<form action="/gimmefile" method="get">
<input type="hidden" name="key" value="8TZbmRZ54IL7"/>
<button type="submit">Export CSV</button>
</form>
</body>
</html>
'''
@cherrypy.expose
def gimmefile(self, key):
cherrypy.response.headers['Content-Type'] = 'application/octet-stream'
cherrypy.response.headers['Content-Disposition'] = 'attachment; filename=yourfile.csv'
return 'Your;file;content;and;{0}'.format(key)
if __name__ == '__main__':
cherrypy.quickstart(App(), '/', config)