https://blog.csdn.net/jehuyang/article/details/79502947
オープンソースのERPとしてOdooは、ヨーロッパで広く使用されてきたが、中国では、基本的にはまだ揺籃期にある、国のアプリケーションはあまりないので、ビューの市場の観点から、その適用の可能性は膨大です。二次開発Odoo基礎を理解するためには、一般的な理解を持っているOdooにマクロからオーダーのウェブOdooの基本原則を実行するために必要でなければなりません。この記事は、Odooアプリケーションの開発を支援することを望んで、この目的のため、簡単な分析に基づいています。
Odoo使用されるプログラミング言語Pythonは、Pythonのウェブ自体が直接リクエストを処理できない、などのJava Web要求が直接処理、またはブリッジメディアを必要とすることはできません、パッケージ後のWebServerからの処理要求Odooパイソンに基づいて行うことが可能です、それはメディアやブリッジは何ですか?ブリッジはWSGIです。最後にだからそれはWSGI何ですか?
1つのWSGI
WSGIの公式の定義:PythonのWebServerのゲートウェイインターフェイス。名前が示唆するように、これはゲートウェイである、ゲートウェイ、ある特定の基準がhttp://legacy.python.org/dev/peps/pep-0333/参照します
(注:以下は、記事からの抜粋である[1])
間の図のプロトコルに示されるように、ゲートウェイの変換が行われます
Webサーバに接続しながら、WSGI、他の側には、ユーザーのアプリケーションに添付します。しかし、この橋の機能は非常に弱く、処理することができ、以下に示すように、時々は、橋を助けるために何かを必要とします:
上記の図では:
また、アプリケーションとして知られているwsgiappはWSGIapplicationです。
これは、多くの場合、セクションハンドラ、ハンドラやアプリ混同しやすい、いわゆるコンテナと呼ばれているが、WSGIコンテナは、また、コンテナとして知られています。
wsgi_middleware、またミドルウェア、プログラムの特殊なタイプ、コンテナに特化し、追加の処理アプリケーションとして知られています
特定WSGIアプリ、WSGIコンテナとWSGIミドルウェア関係の詳細は、記事を参照して、[1]
2 Odooのウェブ操作機構
Webサーバで2.1 Odoo
Odooは、ファイルがserver.pyから知ることができ、ウェブサーバの4種類を達成するために自分自身を定義します
CommonServer 3人の他のサーバーの親
Odooは、標準的なWebサーバとして、デフォルトの選択肢のThreadedServerを実行している場合
2.2 Odoo Webコンテナ
Webコンテナがwsgi_server.pyで定義されているOdoo
エントリ機能はしなければなりません。
DEFアプリケーション(環境、start_responseを)
決定することによって、「HTTP_X_FORWARDED_HOST」リクエストのヘッダ情報とPROXY_MODE openerp-server.confで定義されたプロキシモードは、エージェントが、それによって対応する処理を実行するかどうかを決定するかどうか
2.3 Odoo中的webhandler
Odooにおいて、本odoocontainerので、その要求を処理するための特定のハンドラが存在しなければならない、ハンドラは、特定のコンテナserveltことが理解されるであろう
http.pyファイルで定義されodooハンドラ
次のコードに示すように、実行時には、呼び出しメソッドによってregister_wsgi_handler HandlerRootのodooコンテナは、コンテナに登録されます:
このハンドラは、完全なパケットを使用して実装された第二のパッケージ、およびREPONSE要求に共通の主題をWERKZEUG。WERKZEUG特定のコンテンツ、http://werkzeug.pocoo.org/を参照してください
2.3.1ハンドラ要求分布
HTTP要求
既然可以把handler当做java中的servlet,且Odoo中只有Root这样一个handler,那么可以推定Root必然要负责对所有外部来的请求进行分发处理,通过url映射到具体的controller中来进行处理,执行这个操作的就是Root类的dispatch函数
2 对于Http XML-RPC请求
则由http.py中的dispatch_rpc函数进行处理
2.3.2 Session的处理
Session对于web应用来说相当重要,在Odooo中,session类为OpenERPSession类,定义在http.py文件中
Session什么时候被创建?
在handler类初始化时,创建一个空的session对象,该对象并没有具体的值,如下图所示
当用户第一次登录或者访问系统时,Root类的dispatch方法被调用时被创建
Session 保存在什么地方?
Odoo中的session不是保存在内存中,而是保存在磁盘中,通过openerp.tools.config.session_dir参数设置保存地址,默认地址是在本地应用数据目录,以我的机子为例,默认的存放地址就是:C:\Users\janusx\AppData\Local\OpenERPS.A.\OpenERP\sessions\8.0
因此,我们可以通过设置openerp.tools.config.session_dir变量的值来改变odoo session保存的位置,可以是保存在本地或者结合Redis将Session保存到Redis中
Session 保存的时间是多少?
Odoo对于session的保存,默认是一周,对于超过一周的session,session_gc函数会将其从文件中移除,如下代码所示:
因此,我们可以通过自定义这个时间,来延长或者缩短Odoo的session的保存时间
2.4 Odoo web启动流程
通过以上分析,我们可知Odoo的启动流程,如下图所示
参考:
[1] http://linluxiang.iteye.com/blog/799163