在python中本地下载文件

时间:2012-10-10 12:19:51

标签: python csv export openerp

我在OpenERP中有一个生成CSV文件的python方法。我的问题是如何设置CSV的默认路径是本地路径,而不是服务器上的路径。

我的代码的一部分有with open('export_data.csv', 'wb') as csvfile:。它将文件保存在服务器上。我希望将文件保存在客户端位置。

您对如何实现这一目标有任何想法吗?

内置导出数据功能的openerp不是一个选项。

1 个答案:

答案 0 :(得分:6)

使用fields.binary

在OpenERP中将二进制文件返回到客户端的一种常用方法是使用fields.binary列。您可以将其放在TransientModel对象(以前为osv_memory,用于创建交互式向导)中,该对象仅在会话期间存在。二进制字段值可以设置为先前操作的结果,也可以通过fields.function列模拟它来即时计算。

您可以在官方插件中找到几个这样的示例,例如生成CVS / PO / TGZ文件的translation export wizard。一个缺陷是二进制值必须是base64编码的,这是出于历史RPC传输的原因。

使用静态下载URL

从OpenERP 6.1开始,还可以直接从服务器文件系统下载文件。它就像将文件的URL放在fields.char值中一样简单,作为以模块为根的相对URL,例如/module/path/to/file。然后使用widget="url"在表单视图中将此字段添加为链接。使用它的一种情况是邮件客户端插件的configuration wizard

这适用于作为模块一部分的静态文件,但不适用于由于用户操作而由系统生成的文件,因为它们可能不会存储在模块的文件系统上,甚至是暂时存储的。在正确安全的安装中,OpenERP服务器进程甚至可能无权写入模块源所在的文件系统。


还有其他选项,例如编写自己的Web控制器,但上述解决方案在大多数情况下应该运行良好。