1

在 openerp 6.1 windows 中,当人们从 HR 模块登录和注销时,我尝试捕获公共 IP 地址。因此,在 hr_attendance 模块中,我添加了 ip_address 字段。客户端公共 IP 地址在 web\common\http.py environ['REMOTE_ADDR'] 中可用

from osv import fields, osv
from web.common.http import Root

class hr_attendance(osv.osv):

  def _get_ipaddress(self, cr, uid, context=None):
    ip = None
    try:
       # environ['REMOTE_ADDR'] how to get 
    except Exception, e:
      pass
    return ip

_inherit = "hr.attendance"
_columns = {
       'ip_address' : fields.char('IP Address', readonly=True, size=64)
        }

_defaults = {
        'ip_address': _get_ipaddress,
    }

hr_attendance()

如何在默认方法中获取客户端 IP 地址或 environ['REMOTE_ADDR"]?我需要在 hr_attendance 模块中覆盖哪个类和方法?

我的疑问是需要在 http.py 中调用哪个方法以及在 HR 模块中传递 get environ['REMOTE_ADDR'] 的参数是什么

4

1 回答 1

0

看起来如果不更改 Web 层可能很难做到,因为模块代码对 Web 服务器层一无所知。经过几分钟的挖掘,我能找到的最好的地方是一个可以将 IP 地址从 HTTP 请求复制到 OpenERP 上下文字典的地方。我认为如果您将此行添加到WebRequest.init()方法中,它可能会满足您的需求。

self.context['remote_addr'] = self.httprequest.remote_addr

我认为该上下文将传递给您可以阅读的模块代码。

于 2012-11-13T22:39:31.740 回答