转载请注明原文地址: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. ZROI 暑期高端峰会 A班 Day4 生成函数

    一般生成函数 很普及组,不讲了 生成函数是一种形式幂级数,也就是我们只关心系数,不关心未知数具体的值. 比如 \(\sum\limits_{i\ge 0}x^i=\frac{1}{1-x}\).虽然只 ...

  2. haproxy 配置文件详解 之 配置文件示例

    此示例文件在haproxy1.8.20 测试没有问题: global log 127.0.0.1 local0 info maxconn user nobody group nobody daemon ...

  3. String.format()的详细用法

    问题 在开发的时候一段字符串的中间某一部分是需要可变的 比如一个Textview需要显示”XXX用户来自 上海 年龄 21 性别 男” 其中的 XXX 是用户名 每个用户也是不一样的 地区 上海 为可 ...

  4. Spring Cloud @RefreshScope 原理是什么?

    要清楚RefreshScope,先要了解Scope Scope(org.springframework.beans.factory.config.Scope)是Spring 2.0开始就有的核心的概念 ...

  5. 转 史上最详细的Hadoop环境搭建

    GitChat 作者:鸣宇淳 原文:史上最详细的Hadoop环境搭建 关注公众号:GitChat 技术杂谈,一本正经的讲技术 [不要错过文末活动哦] 前言 Hadoop在大数据技术体系中的地位至关重要 ...

  6. 《Linux就该这么学》培训笔记_ch12_使用Samba或NFS实现文件共享

    <Linux就该这么学>培训笔记_ch12_使用Samba或NFS实现文件共享 文章最后会post上书本的笔记照片. 文章主要内容: SAMBA文件共享服务 配置共享资源 Windows挂 ...

  7. C++动态规划实现查找最长公共子序列

    问题描述: 给定两个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列.(给定两个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共 ...

  8. LOJ2392 JOISC2017 烟花棒 二分、贪心

    传送门 先二分一个最大速度\(v\). 分析移动的性质.很显然的事情是在火焰两边的所有人都会往火焰的方向以最快的速度运动,这样可以使当前位置更早获得火焰,同时当前拥有火焰的若干个人为了传递火焰自然也会 ...

  9. SQL系列(五)—— 排序(order by)

    对查询结果进行排序是日常应用开发中最为常见的需求,在SQL中通过order by实现.order by是select语句中一部分,即子句. 1.order by 1.1 单列排序 其实,检索出的数据并 ...

  10. [Leetcode] Binary Tree Pruning

    題目是說,如果左右子樹都不存在又自已為0,就去掉那個子樹(設為null) recursive後序,左子樹,右子樹,然後是根 自已同時又是別人的子樹,所以要告訢根自已是不是存在 從a開始,左右子樹都不存 ...