如何为Odoo 10实现自定义控制器以覆盖默认控制器

时间:2019-07-17 20:42:30

标签: odoo-10

我需要访问Odoo 10中的/ web / session / authenticate方法(来自Vue应用程序),但是我需要进行少量自定义。 Based on another post我看到应该可以超越Odoo的内置控制器,因此我可以在自定义控制器的自定义模块中使用它:

from odoo import http
from odoo.http import request
from odoo.addons.web.controllers.main import Session

class Session(Session):

    @http.route('/web/session/authenticate', type='json', auth="none", cors="*")
    def authenticate(self, db, login, password, base_location=None):
        print("custom authentication method called")

        request.session.authenticate(db, login, password)
        return request.env['ir.http'].session_info()

existing source code相比,可以看到我所做的只是添加了CORS支持(Vue应用程序中我的axios POST需要该路由)

我没有收到错误,但是由于某种原因,Odoo从未调用过我的自定义代码。也许这与我的模块的加载顺序有关?

1 个答案:

答案 0 :(得分:0)

默认情况下,如果HTTP请求在会话中未指定数据库,则Odoo缺省不知道需要使用带有自定义控制器的自定义模块。

要解决此问题,可以将定制模块称为“服务器范围的模块”。这意味着它在服务器的整个上下文中使用,而不仅仅是在数据库的上下文中使用(它是会话信息的一部分)。可以通过添加--load=web,your_module_here或将其添加到Odoo配置server_wide_modules = web,your_module_here中来完成。

请注意,如果您没有web作为服务器级模块之一,则所有内容都会以404响应结尾。 web是Odoo中默认的服务器级模块