Odoo 中文社区

    • 注册
    • 登录
    • 搜索
    • 版块
    • 标签
    • 热门
    • 用户
    • 群组

    Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

    由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

    本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

    开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

    如果您登录系统碰到问题,请在微信公众号留言:

    OpenERP 7.0 Web模块开发

    Odoo 开发与实施交流
    8
    9
    9238
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • N
      NewZN 最后由 编辑

      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
      • wjfonhand
        wjfonhand 最后由 编辑

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

        GoodERP -- Odoo China fork

        1 条回复 最后回复 回复 引用 0
        • mrshelly
          mrshelly 最后由 编辑

          好........

          1 条回复 最后回复 回复 引用 0
          • N
            NewMoon 最后由 编辑

            好文!正看这部分

            1 条回复 最后回复 回复 引用 0
            • H
              hzren 最后由 编辑

              好,收藏了

              1 条回复 最后回复 回复 引用 0
              • X
                xtjie 最后由 编辑

                不错的内容,学习

                1 条回复 最后回复 回复 引用 0
                • Z
                  zxq1207 最后由 编辑

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

                  1 条回复 最后回复 回复 引用 0
                  • A
                    aornor 最后由 编辑

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

                    1 条回复 最后回复 回复 引用 0
                    • First post
                      Last post