【问题标题】:How to implement custom controller for Odoo 10 that overides default controller如何为 Odoo 10 实现覆盖默认控制器的自定义控制器
【发布时间】:2019-07-17 20:42:30
【问题描述】:

我需要访问 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 从未调用过我的自定义代码。也许这与我的模块加载顺序有关?

【问题讨论】:

  • 另外..请记住,此时没有数据库上下文,因为没有会话。我注意到当没有已知数据库并且 db_monodb() 无法确定数据库时,Odoo 使用“nodb_routing_map”来确定有效路由。所以也许这也会阻止任何控制器在自定义模块中工作??

标签: odoo-10


【解决方案1】:

默认情况下,如果 HTTP 请求没有在会话中指定 DB,Odoo 将不知道需要使用带有自定义控制器的自定义模块。

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

请注意,如果您没有将 web 作为服务器范围的模块之一,那么一切都会以 404 响应结束。 web 是 Odoo 中默认的服务器范围模块

【讨论】:

    猜你喜欢
    • 2015-08-02
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多