odoo文档Web Controllers定义
Controllers
控制器需要提供可扩展性,就像模型一样,但不能使用与先决条件(具有加载模块的数据库)可能尚不可用相同的机制(例如,未创建数据库或未选择数据库)
因此,控制器提供了自己的扩展机制,与模型的扩展机制分开:
控制器是通过继承自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从公共身份验证更改为用户(需要登录)
API
Routing
-
odoo.http.route(route=None, **kw)
装饰器将装饰方法标记为请求的处理程序。该方法必须是Controller子类的一部分
参数如下:-
route – 字符串或数组。确定哪些超文本传输协议请求将与修饰方法匹配的路由部分。可以是单个字符串或字符串数组。有关路由表达式( http://werkzeug.pocoo.org/docs/routing/ )的格式,请参阅werkzeug的路由留档。
-
type – 请求的类型可以是’超文本传输协议’或’json’
-
auth – 认证方式的类型,可以在以下
user: 用户必须经过身份验证,当前请求将使用用户的权限执行public: 用户可能经过身份验证,也可能没有经过身份验证。如果她没有,当前请求将使用共享的公共用户执行。
none: 该方法始终处于活动状态,即使没有数据库。主要由框架和身份验证模块使用。那里的请求代码将没有任何访问数据库的工具,也没有任何指示当前数据库或当前用户的配置。
-
methods – 此路由适用的一系列超文本传输协议方法。如果未指定,则允许所有方法。
-
cors – Access-Control-Allow-Origin cors指令值。
-
csrf (bool) – 是否应为路由启用CSRF保护。
默认为真。有关更多信息,请参阅CSRF保护。
-
Request
请求对象在请求开始时自动设置在 odoo.http.request
-
class odoo.http.WebRequest(httprequest)
所有Odoo Web请求类型的父类,主要处理请求对象的初始化和设置(调度本身必须由子类处理)
参数:httprequest(werkzeug.wrappers.BaseRequest)-一个包装的werkzeug请求对象-
httprequest
提供给请求的原始 werkzeug.wrappers.Request对象 -
params
请求参数的映射,通常没有用,因为它们作为关键字参数直接提供给处理程序方法 -
property cr
为当前方法调用初始化的游标当前请求使用无身份验证时访问游标将引发异常
-
property context
当前请求的上下文值映射 -
property env
环境绑定到当前请求。 -
session
OpenERPS保存当前超文本传输协议会话的HTTP会话数据 -
property registry
链接到此请求的数据库的注册表。如果当前请求使用无身份验证,则可以为无
8.0 版后已移除: use env -
property db
链接到此请求的数据库。如果当前请求使用无身份验证,则可以为无 -
csrf_token(time_limit=None)
为当前会话生成并返回一个CSRF令牌参数:time_limit(int|无)-CSRF令牌有效期(以秒为单位),或只要当前用户会话是,令牌就有效的无(默认值)
返回:ASCII token string
-
-
class odoo.http.HttpRequest(*args)
超文本传输协议请求类型的处理程序。匹配的路由参数、查询字符串参数、表单参数和文件作为关键字参数传递给处理程序方法。
在名称冲突的情况下,路由参数具有优先级。
-
处理程序方法的结果可以是:
-
虚假值,在这种情况下,HTTP响应将是HTTP 204(无内容)
-
一个werkzeug Response对象,按原样返回
-
str或unicode将被包装在Response对象中并解释为超文本标记语言
-
-
make_response(data, headers=None, cookies=None)
非超文本标记语言响应或具有自定义响应标头或cookie的超文本标记语言响应的助手。
虽然处理程序可以只返回他们想要作为字符串发送的页面的超文本标记语言,但如果返回非超文本标记语言数据,他们需要创建一个完整的响应对象,否则返回的数据将不会被客户端正确解释。
参数:data (basestring) – 响应体
headers ([(name, value)]) – 要在响应上设置的HTTP标头
cookies (collections.abc.Mapping) – 要在客户端设置的cookie
-
not_found(description=None)
HTTP 404(未找到)响应的快捷方式 -
render(template, qcontext=None, lazy=True, **kw)
QWeb模板的延迟渲染。给定模板的实际呈现将在调度结束时发生。同时,模板和/或qtext可以被更改甚至替换为静态响应
参数:
template (basestring) – 要渲染的模板qcontext (dict) – 要使用的渲染上下文
lazy (bool) – 模板渲染是否应该推迟到最后一刻
kw – 转发到werkzeug的Response对象
-
-
class odoo.http.JsonRequest(*args)
JSON-RPC 2 over HTTP的请求处理程序
-
方法被忽略
-
params必须是JSON对象(不是数组)并作为关键字参数传递给处理程序方法
-
处理程序方法的结果作为JSON-RPC结果返回并包装在JSON-RPC响应中
成功请求:
--> {"jsonrpc": "2.0", "method": "call", "params": {"context": {}, "arg1": "val1" }, "id": null} <-- {"jsonrpc": "2.0", "result": { "res1": "val1" }, "id": null}
请求产生错误:
--> {"jsonrpc": "2.0", "method": "call", "params": {"context": {}, "arg1": "val1" }, "id": null} <-- {"jsonrpc": "2.0", "error": {"code": 1, "message": "End user error message.", "data": {"code": "codestring", "debug": "traceback" } }, "id": null}
-
Response
-
class odoo.http.Response(*args, **kw)
响应对象通过控制器路由链传递。
除了 werkzeug.wrappers.响应参数之外,此类的构造函数还可以为QWeb延迟渲染采用以下附加参数
参数:-
template (basestring) –要渲染的模板
-
qcontext (dict) – 要使用的渲染上下文
-
uid (int) – 用户ID用于 ir.ui.view 渲染调用,无使用请求的用户(默认)
这些属性可作为Response对象的参数使用,并且可以在渲染前随时更改
还公开了 werkzeug.wrappers.Response的所有属性和方法
-
render()
呈现Response的模板,返回结果 -
flatten()
强制呈现响应的模板,将结果设置为响应正文并取消设置模板
-
以上是根据odoo15文档中Web Controllers翻译的