近期准备对odoo web模块进行一些整理,大致的说说odoo的前端界面是如何生成的,又是如何与后端交互,主要着重点就是odoo的js这块的东西,由于odoo11的js代码已经有了较大的改变,所以就以odoo11来分析吧。
为了简单叙述,暂时不考虑多个db的情况(主要是懒得说没有db或者多个db实例的情况)当odoo指定数据库开启服务时(也就是odoo-bin -d <some_db_name>
),我们使用chrome的隐身模式访问http://127.0.0.1:8069
,此时打开chrome的开发者模式,查看Network可以看到,请求和相应如下
1. 输入http://127.0.0.1:8069/之后发生了什么
192.168.56.102
, 这个是我的虚机ip地址,返回响应是200,可以通过源代码中, 我们看到
# web/controllers/main.py:435
@http.route('/', type='http', auth='none')
def index(self, s_action=None, db=None, **kwargs):
return http.local_redirect('/web', query=request.params, keep_hash=True)
按照代码命名来看,应该返回一个30x
的redirect响应,为什么实际返回的确是200的响应头呢?
继续查看代码,可以发现就是keep_hash=True
这个参数所引起的,在local_redirect
函数中由于keep_hash,
# odoo/http.py:156
def redirect_with_hash(url, code=303):
if request.httprequest.user_agent.browser in ('firefox',):
return werkzeug.utils.redirect(url, code)
url = pycompat.to_text(url)
if urls.url_parse(url, scheme='http').scheme not in ('http', 'https'):