在python中本地下载文件

Reg*_*ris 1 python csv export openerp

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

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

你对如何实现这个有任何想法吗?

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

odo*_*ony 6

使用fields.binary

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

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

使用静态下载URL

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

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


还有其他选项,例如编写自己的Web控制器,但上述解决方案应该适用于大多数情况.