转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826241.html

一:Controller

一般通过继承的形式来创建controller类,继承自odoo.http.Controller。

以route装饰器来装饰定义的方法,提供url路由访问路径:

class MyController(odoo.http.Controller)://继承controller定义控制器
@route('/some_url', auth='public')//装饰器路由访问方法,并指明访问方式:公开还是需要用户登陆
def handler(self):
return stuff()

二:路由映射相关

odoo.http.route(route=None, **kw) 装饰器可以将对应方法装饰为处理对应的http请求。

装饰器参数有:

1)route

字符串或数组,决定哪些http请求可以匹配所装饰的方法,可以是单个字符串、或多个字符串的数组

2)type

请求的类型,可以是http或json

3)auth

认证方法的类型,可以是以下几种:

user - 必须是已通过登录认证的用户,才能访问该请求。如果未经过登录直接访问,则会拦截并跳转回odoo登录页面。

public - 使用公用的认证,可以不经过登录验证直接访问。

none - 相应的方法总是可用,一般用于框架和认证模块,对应请求没有办法访问数据库或指向数据库的设置。

4)methods

这个请求所应用的一系列http方法【PATCH, POST, PUT, 或者DELETE】,如果没指定则是所有方法。

 methods=['POST', 'GET']

5)cors

跨域资源cors参数。

6)csrf(boolean)

是否开启CSRF跨域保护,默认True。

a)如果表单是用python代码生成的,可通过request.csrf_token() 获取csrf

b)如果表单是用javascript生成的,CSRF token会自动被添加到QWEB环境变量中,通过require('web.core').csrf_token获取

c)如果终端可从其他地方以api或webhook形式调用,需要将对应的csrf禁用,此时最好用其他方式进行验证

三:请求相关

请求对象在收到请求时自动设置到odoo.http.request,可以通过该对象提前request中携带的 参数、cookie、session对象等。

跟请求相关的类和函数有以下几种:

1:class odoo.http.WebRequest(httprequest)

所有odoo WEB请求的父类,一般用于进行请求对象的初始化,其构建函数的参数有:

1)httprequest

原始的werkzeug.wrappers.Request对象

2)params

请求参数的映射

3)cr

当前方法调用的初始游标,当使用none的认证方式时读取游标会报错

4)context

当前请求的上下文键值映射

5)env

绑定到当前请求的环境

6)session

储存当前请求session数据的OpenERPSession

7)debug

指定当前请求是否是debug模式

8)db

当前请求所关联的数据库,当使用none认证时为None

9)csrf_token(time_limit=3600)

为该请求生成并返回一个token(参数以秒计算,默认1小时,如果传None表示与当前用户session时间相同)

2:class odoo.http.HttpRequest(*args)

用于处理http类型请求的函数,匹配 路由参数、查询参数、表格参数,如果有指定文件也会传给该方法。为防止重名,路由参数优先级最高。
    该函数的返回值有三种:

    • 无效值,HTTP响应会返回一个204(没有内容)
    • 一个werkzeug 响应对象
    • 一个字符串或unicode,会被响应对象包装并使用HTML解析

3:make_response(data, headers=None, cookies=None)

用于生成没有HTML的响应 或 自定义响应头、cookie的html响应。
    由于处理函数只以字符串形式返回html标记内容,需要组成一个完整的响应对象,这样客户端才能解析

参数有:

1)data (basestring)

响应主体。

2)headers ([(name, value)])

http响应头。

3)cookies (collections.Mapping)

发送给客户端的cookie。

4:not_found(description=None)

给出404 NOT FOUND响应。

5:render(template, qcontext=None, lazy=True, **kw)

渲染qweb模板,在调度完成后会对给定的模板进行渲染并返回给客户端。

参数有:

1)template (basestring)

用于渲染的模板完整ID:模块.模版

2)qcontext (dict)

用于渲染的上下文环境。

3)lazy (bool)

渲染动作是否应该拖延到最后执行。

4)kw

转发到werkzeug响应对象。

6:class odoo.http.JsonRequest(*args)

处理通过http发来的json rpc请求。

参数:params -- 是一个json格式对象

返回值:一个json-rpc格式的,以JSON-RPC Response对象的组装。

四:响应相关

1:class odoo.http.Response(args, *kw)

响应对象通过控制器的路由传递,在werkzeug.wrappers.Response之外,该类的构造方法会添加以下参数到qweb的渲染中:

1)template (basestring)

用于渲染的模板。

2)qcontext (dict)

用在渲染中的上下文环境。

3)uid (int)

用于调用ir.ui.view渲染的用户id,None时使用当前请求的id。

上面的参数在实际渲染之前可以随时作为Response对象的属性进行修改。

    response对象可以调用以下方法:

    • render() - 渲染响应对象的模板,并返回内容。
    • flatten() - 强制渲染响应对象的模板,将结果设置为响应主体,并将模板复原。

Odoo Controller详解的更多相关文章

  1. Asp.Net MVC part2 View、Controller详解

    View详解Razor视图引擎简介HtmlHelper强类型页面 Razor视图引擎简介强大的@:表示使用C#代码,相当于aspx中的<%%>可以完成输出功能当遇到html标签时会认为C# ...

  2. SpringMVC 基于注解的Controller详解

    本文出处 http://blog.csdn.net/lufeng20/article/details/7598801 概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spri ...

  3. (15)odoo配置文件详解

    openerp-server.conf ---------------- [options]; addons模块的查找路径addons_path = E:\GreenOdoo8.0\source\op ...

  4. SpringMVC Controller详解

    SpringMVC Controller 介绍 一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理 ...

  5. JMeter之Throughput Controller详解(实验)

    Throughput Contoller,直译是吞吐量控制器,它是用来控制该控制器下面元件的执行次数,与控制吞吐量的功能无关.(注:用Constant Throughput Timer可以控制吞吐量. ...

  6. odoo配置文件详解

    addons模块的查找路径 addons_path = D:\odoo\Odoo 10.0\server\odoo\addons 超级管理员(用于创建,还原和备份数据库的操作) admin_passw ...

  7. SpringMVC框架02——SpringMVC的Controller详解

    1.基于注解的控制器 1.1.@Controller 注解类型 在SpringMVC中使用org.springframework.stereotype.Controller注解类型声明某类的实例是一个 ...

  8. jmeter 逻辑控制器Logic Controller详解

    Jmeter之逻辑控制器(Logic Controller) 前言: 1. Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in w ...

  9. odoo domain详解

    参考的以下文档: luohuayong:Odoo domain写法及运用 baimo:odoo domain表达式 1.domain 表达式规则 最简单的格式:[('字段名','操作符',值)] 例: ...

随机推荐

  1. 网络协议 18 - CDN

    到现在为止,我们基本上已经了解了网络协议中的大部分常用协议,对于整个 HTTP 请求流程也较为熟悉了.从无到有后,我们就要考虑如何优化“有”这个过程,也就是我们常见的请求优化.而现在的技术栈中,CDN ...

  2. 从$a_n=f(n)$的角度理解数列中的表达式$a_{n+1}=\frac{k}{a_n}$

    函数周期性 前面我们学习过函数的周期性的给出方式: \(f(x+a)=f(x)\) \(\hspace{2cm}\) \(T=a\) \(f(x+a)=-f(x)\) \(\hspace{2cm}\) ...

  3. DDD(Domain Driven Design) 架构设计

    一.为什么要分层 分层架构是所有架构的鼻祖,分层的作用就是隔离,不过,我们有时候有个误解,就是把层和程序集对应起来,就比如简单三层架构中,在你的解决方案中,一般会有三个程序集项目:XXUI.dll.X ...

  4. IIS 安装 .net core 绑定为 https 使用SSL证书

    前提条件: 自己服务器(Windows Server 2016)运行 dotnet .\Web****.dll 服务是可以使用http访问的 但由于实际情况必须使用https 思想历程,但未用: 1. ...

  5. elasticsearch 分片的创建 集群重启分片运作

    2016年11月12日ENGINEERING Every shard deserves a home 作者 Joshua Backing Share Here are some great slide ...

  6. CentOS环境设置Hbase自启动

    1.在/etc/init.d/目录创建hbase文件 #!/bin/bash # chkconfig: #export JAVA_HOME=/usr/local/jdk1.8.0_191 HBASE_ ...

  7. github下载速度慢甚至多次失败,通过码云的导入功能导入github项目到码云上,然后再从码云下载

    github下载速度慢甚至多次失败,通过码云的导入功能导入github项目到码云上,然后再从码云下载 参考 https://blog.csdn.net/kcx64/article/details/83 ...

  8. 【VS开发】vector features(num_images)析构报错

    代码一气呵成,但运行的时候会出现_CrtIsValidHeapPointer的异常,跟进去调了一上午的Bug,终于搞定 跟踪定位到 _CrtIsValidHeapPointer ,注意到 g 8h&q ...

  9. 通过inspect在电脑的Chrome上查看手机上的H5

    首先打开手机的开发者模式,(在连续点击7次版本号,系统会提示已经打开开发者模式) 然后打开一个手机浏览器. 然后在电脑上打开chrome://inspect/#devices.这是就会出现手机上浏览器 ...

  10. ArcGIS Server浏览地图服务无响应原因分析说明

    1.问题描述 从4月17号下午5时起,至18号晚9点,客户单位部分通过ArcGIS Server发布的地图服务(该部分地图服务的数据源为数据库SJZX)无法加载浏览,表现为长时间无响应.同时,通过Ar ...