跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 开发与实施交流
  4. OpenERP 7.0 Web模块开发

OpenERP 7.0 Web模块开发

已定时 已固定 已锁定 已移动 Odoo 开发与实施交流
9 帖子 8 发布者 9.7k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • N 离线
    N 离线
    NewZN
    写于 最后由 编辑
    #1

    1)OpenERP Web框架原理
    1.1)系统启动
    OpenERP系统启动代码见openerp/cli/server.py,系统启动时候,首先检查多核参数(workers),如果是多进程模式(multi_process),则启动多核版(Multicorn)WSGI_Server,否则启动单核版WSGI_Server。如果是单进程模式,系统同时启动netrpc_server和cron线程。多进程模式,则不启动netrpc_server和cron线程,相关代码参见openerp/service/init.py。因此,多进程模式下,基于netrpc的GUI客户端不能用,同时,系统正常运行必不可少的cron作业需要另开进程启动。

    1.2)WSGI_Server启动
        WSGI_Server启动后,侦听http请求。当收到请求后,轮询handler,如果某handler返回了结果,则返回给客户。如果没有合适的handler响应,则返回404错误页面。
        handler分系统handler和模块handler,系统handler是系统启动时候加载的,模块handler是,加载含有handler的模块时候,注册handler到WSGI_Server。系统handler有:wsgi_xmlrpc_1, wsgi_xmlrpc, wsgi_xmlrpc_legacy, wsgi_webdav,他们处理下述路径的web请求:
    XML_RPC_PATH = '/openerp/xmlrpc'
    XML_RPC_PATH_1 = '/openerp/xmlrpc/1'
    JSON_RPC_PATH = '/openerp/jsonrpc'
    JSON_RPC_PATH_1 = '/openerp/jsonrpc/1'

    相关代码见:wsgi_server.py 的application_unproxied 。

        系统目前只有一个模块handler,即addons/web模块提供的handler。该模块加载时,即注册handler。该handler中,收到http请求时候,根据请求的path,查找http_controller,找到controller则调用该controller的方法。
        http_controller的原理是,OpenERP系统将addons下含有static目录的模块当成http_controller。系统加载该模块时候,自动将模块中的继承自web.http.Controller的class当作http_controller。每个http_controller有属性_cp_path,表明该controller处理_cp_path下的请求。系统根据请求路径比对_cp_path,找到相应controller,调用controller的method响应请求。请求路径中最后一个/之后的内容,系统默认为是controller的method名。上述相关代码见:openerp/addons/web/http.py 。

    2)Web模块开发
        OpenERP web模块很简单,只要在普通模块中,a)增加目录static,其中通常存放静态网页内容,包括js,img,xml模板等。b)通常增加一个controllers目录(不是必须的),里面放py的http_controller代码。每个controller都必须继承自openerp.addons.web.http.Controller,并且必须有属性_cp_path 。controller中的每个method相应一种http请求。

    1 条回复 最后回复
    0
    • wjfonhandW 离线
      wjfonhandW 离线
      wjfonhand
      写于 最后由 编辑
      #2

      能用简练的语言把复杂的技术说清楚,值得一读!谢谢分享

      GoodERP -- Odoo China fork

      1 条回复 最后回复
      0
      • mrshellyM 离线
        mrshellyM 离线
        mrshelly
        写于 最后由 编辑
        #3

        好........

        1 条回复 最后回复
        0
        • N 离线
          N 离线
          NewMoon
          写于 最后由 编辑
          #4

          好文!正看这部分

          1 条回复 最后回复
          0
          • H 离线
            H 离线
            hzren
            写于 最后由 编辑
            #5

            好,收藏了

            1 条回复 最后回复
            0
            • X 离线
              X 离线
              xtjie
              写于 最后由 编辑
              #6

              不错的内容,学习

              1 条回复 最后回复
              0
              • Z 离线
                Z 离线
                zxq1207
                写于 最后由 编辑
                #7

                感谢楼主的无私分享。。。。

                1 条回复 最后回复
                0
                • A 离线
                  A 离线
                  aornor
                  写于 最后由 编辑
                  #8

                  简单易懂,自己要是看的话就满天星星,谢谢

                  1 条回复 最后回复
                  0

                  • 登录

                  • 没有帐号? 注册

                  • 登录或注册以进行搜索。
                  • 第一个帖子
                    最后一个帖子
                  0
                  • 版块
                  • 标签
                  • 热门
                  • 用户
                  • 群组