本文共 4174 字,大约阅读时间需要 13 分钟。
odoo.http.route(route=None, **kw)
标记装饰方法作为请求处理程序的装饰程序。该方法必须是Controller的一个子类的一部分。
参数
'http'
或 'json'
.身份验证方法的类型,可以有以下内容:
user
: 必须对用户进行身份验证,当前请求将使用用户的权限执行public
: 用户可以被验证,也可以不被验证。如果不是,当前请求将使用共享公共用户执行none
: 该方法始终是活动的,即使没有数据库。主要用于框架和验证模块。请求代码将没有任何访问数据库的设施,也没有任何配置指示当前数据库或当前用户CSRF保护是否应该为路由启用
默认值为 True
. 详见 了解更多(如下)
CSRF Protection
版本9.0中的新内容。
Odoo实现了基于保护的令牌。
CSRF保护默认是启用的,适用于不安全的HTTP方法由定义(所有方法,除了GET
, HEAD
, TRACE
和OPTIONS
)。
CSRF保护是通过检查请求,其为一个值使用不安全的方法,该值称为csrf_token,其作为请求的表单数据的一部分。该值作为验证的一部分从表单中移除,而不必由您自己的表单处理来考虑。
为不安全的方法添加新控制器时(例如主要为表达使用POST):
request
对象通过QWeb (python)模版中的默认模版获得, 它可能需要明确的添加如果你不使用 QWeb如果表单用Javascript生成,,CSRF令牌添加默认的QWeb (js)渲染上下文作为csrf_token,否则可以获得web.core模块csrf_token:
require('web.core').csrf_token
请求对象在请求开始自动设置 odoo.http.request
class odoo.http.WebRequest(httprequest)
所有Odoo Web请求类型的父类,主要是处理请求的对象的初始化和设置 (调度本身必须由子类处)
参数
httprequest () -- 一个封装的werkzeug请求对象
httprequest
提供给请求的最初的 对象
params
请求参数的,通常不是有用的,因为它们直接作为关键字参数提供给处理程序方法
cr
Cursor
为当前方法调用初始化
当当前请求使用none身份验证时访问游标将引发异常
context
当前请求的上下文值
env
绑定到当前请求的Environment
session
OpenERPSession
为当前HTTP会话保留HTTP会话数据
debug
指示当前请求是否处于“调试”模式
registry
连接到该请求的数据库的注册表。如果当前请求使用none身份验证,可以是None
推荐使用8.0以后的版本:使用
db
与此请求相关联的数据库。 如果当前请求使用none身份验证,可以是None
csrf_token(time_limit=3600)
生成并返回当前会话的CSRF令牌
参数
time_limit (int | None
) -- CSRF令牌应该只适用于指定的时间(以秒),默认情况下1h,令牌为None是有效的只要当前用户的会话是有效的
返回
ASCII 令牌字符串
class odoo.http.HttpRequest(*args)
用于http
请求类型的处理程序
匹配的路由参数、查询字符串参数、表单参数和文件作为关键字参数传递给处理程序方法。
在名称冲突的情况下,路由参数具有优先权。
处理程序方法的结果可以是:
str
或unicode
,将被包装在响应对象中并被解释为HTMLmake_response(data, headers=None, cookies=None)
用于非HTML响应的助手,或带有自定义响应头或cookie的html响应。
虽然处理程序只返回作为字符串发送的页面的HTML标记,如果返回非HTML数据,则需要创建一个完整的响应对象,否则返回的数据将不能被客户端正确地解释
参数
[(name, value)]
) -- 在响应上设置的HTTP标头not_found(description=None)
HTTP 404(未找到)响应的快捷方式
render(template, qcontext=None, lazy=True, **kw)
一个QWeb模版的懒渲染。
给定模板的实际呈现将在调度结束时发生。同时, 模板and/or qcontex参数可以通过静态响应更改或替换。
参数
class odoo.http.JsonRequest(*args)
HTTP上的对的请求处理
method
被忽略params
必须是JSON对象(不是数组),并作为关键字参数传递给处理程序方法 result
并且封装在中成功的请求:
--> {"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}
class odoo.http.Response(*args, **kw)
响应对象通过控制器路由链。
除了 参数之外,这类的构造函数可以采取下列附加的参数对QWeb进行懒渲染。
参数
None
用于请求的用户 (默认的)这些属性可作为响应对象上的参数,并且可以在呈现之前随时更改
还公开了所有的属性和方法
render()
呈现响应的模板,返回结果
flatten()
强制渲染响应的模版,设置结果作为响应体并不设置 template
控制器需要提供可扩展性,类似于,但不能使用与前置条件(带有加载模块的数据库)相同的机制(如没有创建数据库或没有数据库选择)。
因此,控制器提供了自己的扩展机制,与模型的扩展机制不同:
控制器是通过继承而创建的
class odoo.http.Controller
并使用定义装饰的方法:
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()
所有方法的装饰相结合,如果重写方法的装饰没有参数,那所遇之前的装饰都将保留,任何提供的参数将覆盖以前定义的例如:
class Restrict(MyController): @route(auth='user') def handler(self): return super(Restrict, self).handler()
将从对用户(需要登录)的公共身份验证改变/some_url
ps:有翻译不当之处,欢迎留言指正。
原文地址:
转载地址:http://srwhj.baihongyu.com/