Web 控制器¶
控制器¶
控制器需要提供可扩展性,这与 Model 很像,但不能使用相同的机制,因为前置条件(一个已加载模块的数据库)可能尚不可用(例如尚未创建数据库,或未选择数据库)。
因此,控制器提供了自己的扩展机制,与模型的扩展机制相互独立:
控制器通过 继承 Controller 来创建。路由通过使用 route() 装饰的方法来定义::
class MyController(odoo.http.Controller):
@route('/some_url', auth='public')
def handler(self):
return stuff()
要 覆盖 一个控制器,需从其类 继承,覆盖相关方法,并在必要时重新暴露它们::
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从 public 身份验证改为 user 身份验证(需要登录)
API¶
路由¶
请求¶
在请求开始时,请求对象会被自动设置到 odoo.http.request 上。