1

openerp 6.1 ウィンドウで、HR モジュールからサインインおよびサインアウトするときに、パブリック IP アドレスを取得しようとしました。そこで、hr_attendance モジュールに ip_address フィールドを追加しました。web\common\http.py 環境で使用可能なクライアント パブリック IP アドレス['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 アドレスまたは環境 ['REMOTE_ADDR"] を取得するにはどうすればよいですか? hr_attendance モジュールでオーバーライドする必要があるクラスとメソッドはどれですか?

私の疑いでは、http.pyでどのメソッドを呼び出す必要があるのか​​ 、HRモジュールで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 に答える