网络控制器

控制器

控制器需要提供可扩展性,就像 Model 一样,但不能使用相同的机制,因为先决条件(已加载模块的数据库)可能尚不可用(例如,未创建数据库或未选择数据库)。

因此,控制器提供了自己的扩展机制,与模型的扩展机制分开:

控制器由 inheritingController 创建。路由是通过用 route():: 修饰的方法定义的

class MyController(odoo.http.Controller):
    @route('/some_url', auth='public')
    def handler(self):
        return stuff()

要“覆盖”控制器,请从其类中 inherit 并覆盖相关方法,必要时重新公开它们:

class Extension(MyController):
    @route()
    def handler(self):
        do_before()
        return super(Extension, self).handler()
  • 使用 route() 装饰对于保持方法(和路由)可见是必要的:如果在没有装饰的情况下重新定义方法,它将被“未发布”

  • 所有方法的装饰器都会组合在一起,如果覆盖方法的装饰器没有参数,则所有先前的装饰器将被保留,任何提供的参数将覆盖先前定义的参数,例如:

    class Restrict(MyController):
        @route(auth='user')
        def handler(self):
            return super(Restrict, self).handler()
    

    将“/some_url”从公共身份验证更改为用户(需要登录)

应用程序编程接口

路由

要求

请求对象在请求开始时自动设置在 odoo.http.request 上。

回复