odoo10参考系列--网络控制器(Web Controllers)
路由
odoo.http.route(route=None, **kw)
标记装饰方法作为请求处理程序的装饰程序。该方法必须是Controller的一个子类的一部分。
参数
- route -- 字符串或数组。路由部分将决定哪些HTTP请求将与装饰方法相匹配。可以是单个字符串或字符串数组。详见werkzeug的路由表达式格式的路由文档( http://werkzeug.pocoo.org/docs/routing/ )
- type -- 请求类型,可以是
'http'
或'json'
. - auth --
身份验证方法的类型,可以有以下内容:
user
: 必须对用户进行身份验证,当前请求将使用用户的权限执行public
: 用户可以被验证,也可以不被验证。如果不是,当前请求将使用共享公共用户执行none
: 该方法始终是活动的,即使没有数据库。主要用于框架和验证模块。请求代码将没有任何访问数据库的设施,也没有任何配置指示当前数据库或当前用户
- methods -- 此路由适用于一系列的HTTP方法。如果未指定,则允许使用所有方法
- cors -- The Access-Control-Allow-Origin cors directive value.
- csrf (
bool
) --CSRF保护是否应该为路由启用
默认值为
True
. 详见CSRF Protection 了解更多(如下)
CSRF Protection
版本9.0中的新内容。
Odoo实现了基于CSRF保护的令牌。
CSRF保护默认是启用的,适用于不安全的HTTP方法由RFC 7231定义(所有方法,除了GET
, HEAD
, TRACE
和OPTIONS
)。
CSRF保护是通过检查请求,其为一个值使用不安全的方法,该值称为csrf_token,其作为请求的表单数据的一部分。该值作为验证的一部分从表单中移除,而不必由您自己的表单处理来考虑。
为不安全的方法添加新控制器时(例如主要为表达使用POST):
- 如果表达用Python生成,一个csrf 令牌可通过request.csrf_token() <odoo.http.WebRequest.csrf_token()获得,
request
对象通过QWeb (python)模版中的默认模版获得, 它可能需要明确的添加如果你不使用 QWeb 如果表单用Javascript生成,,CSRF令牌添加默认的QWeb (js)渲染上下文作为csrf_token,否则可以获得web.core模块csrf_token:
require('web.core').csrf_token
- 如果端点可以被外部各方(不是Odoo)调用,例如REST API或webhook,CSRF保护必须在端点禁用。如果可能的话,你可能需要实现其他请求验证方法(确保它不被无关的第三方)
请求
请求对象在请求开始自动设置 odoo.http.request
class odoo.http.WebRequest(httprequest)
所有Odoo Web请求类型的父类,主要是处理请求的对象的初始化和设置 (调度本身必须由子类处)
参数
httprequest (werkzeug.wrappers.BaseRequest
) -- 一个封装的werkzeug请求对象
httprequest
提供给请求的最初的 werkzeug.wrappers.Request
对象
params
请求参数的Mapping
,通常不是有用的,因为它们直接作为关键字参数提供给处理程序方法
cr
Cursor
为当前方法调用初始化
当当前请求使用none身份验证时访问游标将引发异常
context
当前请求的上下文值Mapping
env
绑定到当前请求的Environment
session
OpenERPSession
为当前HTTP会话保留HTTP会话数据
debug
指示当前请求是否处于“调试”模式
registry
连接到该请求的数据库的注册表。如果当前请求使用none身份验证,可以是None
推荐使用8.0以后的版本:使用 env
db
与此请求相关联的数据库。 如果当前请求使用none身份验证,可以是None
csrf_token(time_limit=3600)
生成并返回当前会话的CSRF令牌
参数
time_limit (int | None
) -- CSRF令牌应该只适用于指定的时间(以秒),默认情况下1h,令牌为None是有效的只要当前用户的会话是有效的
返回
ASCII 令牌字符串
class odoo.http.HttpRequest(*args)
用于http
请求类型的处理程序
匹配的路由参数、查询字符串参数、表单参数和文件作为关键字参数传递给处理程序方法。
在名称冲突的情况下,路由参数具有优先权。
处理程序方法的结果可以是:
- 一个非法的值,在这种情况下,HTTP响应将HTTP 204(无内容)
- 一个返回的werkzeug对象
- 一个
str
或unicode
,将被包装在响应对象中并被解释为HTML
make_response(data, headers=None, cookies=None)
用于非HTML响应的助手,或带有自定义响应头或cookie的html响应。
虽然处理程序只返回作为字符串发送的页面的HTML标记,如果返回非HTML数据,则需要创建一个完整的响应对象,否则返回的数据将不能被客户端正确地解释
参数
- data (
basestring
) -- 响应体 - headers (
[(name, value)]
) -- 在响应上设置的HTTP标头 - cookies (
collections.Mapping
) -- 设置在客户端的cookie
not_found(description=None)
HTTP 404(未找到)响应的快捷方式
render(template, qcontext=None, lazy=True, **kw)
一个QWeb模版的懒渲染。
给定模板的实际呈现将在调度结束时发生。同时, 模板and/or qcontex参数可以通过静态响应更改或替换。
参数
- template (
basestring
) -- 模板渲染 - qcontext (
dict
) --渲染上下文使用 - lazy (
bool
) -- 模板呈现是否应该推迟到最后一刻 - kw -- 发送到werkzeug的响应对象
class odoo.http.JsonRequest(*args)
HTTP上的对JSON-RPC 2的请求处理
method
被忽略params
必须是JSON对象(不是数组),并作为关键字参数传递给处理程序方法- 处理方法的结果返回为JSON-RPC
result
并且封装在JSON-RPC Response中
成功的请求:
--> {"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)
响应对象通过控制器路由链。
除了werkzeug.wrappers.Response
参数之外,这类的构造函数可以采取下列附加的参数对QWeb进行懒渲染。
参数
- template (
basestring
) -- 模板渲染 - qcontext (
dict
) -- 渲染上下文使用 - uid (
int
) -- 用户id用于ir.ui.view渲染调用,None
用于请求的用户 (默认的)
这些属性可作为响应对象上的参数,并且可以在呈现之前随时更改
还公开了所有的属性和方法 werkzeug.wrappers.Response
render()
呈现响应的模板,返回结果
flatten()
强制渲染响应的模版,设置结果作为响应体并不设置 template
控制器
控制器需要提供可扩展性,类似于Model
,但不能使用与前置条件(带有加载模块的数据库)相同的机制(如没有创建数据库或没有数据库选择)。
因此,控制器提供了自己的扩展机制,与模型的扩展机制不同:
控制器是通过继承而创建的
class odoo.http.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
ps:有翻译不当之处,欢迎留言指正。
原文地址:https://www.odoo.com/documentation/10.0/reference/http.html
odoo10参考系列--网络控制器(Web Controllers)相关推荐
- Odoo10参考系列--QWeb报表
报表是写在HTML / QWeb中,像Odoo中的所有普通视图.你可以使用普通QWeb 流程控制工具.PDF的渲染是通过wkhtmltopdf执行的. 如果要在某个模型上创建报表,则需要定义该报表和它 ...
- Odoo10参考系列--Odoo指导方针
本文介绍了新版Odoo编码指南.那些旨在提高代码的质量 (例如更好的可读性)和Odoo应用程序.实际上,适当的代码简化了维护.调试,降低了复杂性,提高了可靠性. 这些指导原则应适用于每一个新的模块和新 ...
- odoo10参考系列--QWeb
QWeb是被Odoo[2]使用的主要的模版引擎.它是一个XML模板引擎[1],主要用于生成HTML片段和页面. 模板指令指定的XML属性的前缀 t-,例如t-if 为条件,与元素和其他属性被直接渲染. ...
- odoo10参考系列--ORM API 二(新旧API兼容性、模型参考和方法修饰符)
新API与旧API的兼容性 现在的Odoo是从就的(不规律的)API过渡来的,它可能需要从一个手动桥接到另一个手动桥接: RPC层(XML-RPC和RPC)是在旧的API的形式表达,表达的纯粹的方法在 ...
- odoo10参考系列--ORM API 一(记录集、环境、通用方法和创建模型)
记录集 版本8.0中新东西: 这个在Odoo8.0中新加的API的页面文档应该是不断向前发展的主要开发API.同时它还提供了关于移植或桥接版本7和更早版本的"旧API"的信息,但没 ...
- Odoo10参考系列--Mobile JavaScript
介绍 在Odoo 10.0中我们发布了一个移动app,允许您访问所有的Odoo apps (即使您自定义了模块). 应用程序是Odoo Web 和Native Mobile components的组合 ...
- Odoo10参考系列--翻译模块
导出可翻译的条款 在你的模块的一些条款是作为一个结果的"隐式翻译",即使你没有对翻译做任何具体的工作,你可以导出你的模块的可译性条款和可以找到进行翻译工作的内容. 翻译导出通过管理 ...
- odoo10参考系列--操作(Actions)
操作定义系统响应用户操作的行为:登录.操作按钮.发票的选择,- 操作可以存储在数据库中,也可以直接作为字典返回,例如按钮方法.所有操作共享两个强制属性: type 当前操作的类别,决定可以使用哪些字段 ...
- odoo10参考系列--视图三(其他高级视图)
图表 图表视图用于在多个记录或记录组上可视化聚合视图.它的根元素是<graph> ,可以有以下属性: type 使用bar (默认的), pie 和line三个中的一个图表类型 stack ...
最新文章
- 如何修改可运行Jar包,如何反编译Jar包
- 尤雨溪回应:Vue与TypeScript为什么相性特别差?
- R语言timevis包的学习
- int 9中断例程-;在屏幕中间依次显示'a'~'z',并可以让人看清。 在显示的过程中,按下Esc键后,改变显示的颜色...
- 文本编辑器实现复制、剪切、粘贴、撤销、重做操作
- JAVA语言中的反射机制
- python使用xml布局界面_Python:使用ElementTree更新XML文件,同时尽可能地保留布局...
- 产品经理思维模型:文化母体、品牌寄生、超级符号
- 《软件工程》课之-调查问卷的心得体会
- mysql leave的作用_MySQL数据库中DELIMITER的作用
- java ie下载文件名乱码问题_php中强制下载文件的代码(解决了IE下中文文件名乱码问题)...
- python多线程编程
- dubbo升级spring4与cxf
- Spring强制使用CGLIB代理事务
- python如何提高程序可读性_Python规范:提高可读性
- 语言翻译成汇编语言_编程语言分类
- 带你玩转Visual Studio——带你高效开发
- 马哥学习笔记十八——MySQL进阶之日志管理
- 今日头条导航栏动画选中+recyclerview
- excel冻结行和列_说一说有些人在EXCEL中还不会用的冻结窗格
热门文章
- 清新浪漫风情人节海报PSD分层模板!
- 年底促销海报还没准备好?电商美工看这里
- 在集设网看世界顶级电影海报欣赏,太美了!
- 中国风海报设计模板,东方韵味尽显
- 看!这组灵感超赞的创意海报!值得设计师收藏
- python金融衍生品_《Python金融衍生品大数据分析:建模、模拟、校准与对冲(博文视点出品)》【摘要 书评 试读】- 京东图书...
- std::auto_ptr简单使用
- CPU的向量化、多核技术、多路技术、众核技术
- HTTPS原理与流程
- C语言libcurl:提供特定主机和端口对的自定义地址--resolve