Odoo Controller详解
转载请注明原文地址: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详解的更多相关文章
- Asp.Net MVC part2 View、Controller详解
View详解Razor视图引擎简介HtmlHelper强类型页面 Razor视图引擎简介强大的@:表示使用C#代码,相当于aspx中的<%%>可以完成输出功能当遇到html标签时会认为C# ...
- SpringMVC 基于注解的Controller详解
本文出处 http://blog.csdn.net/lufeng20/article/details/7598801 概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spri ...
- (15)odoo配置文件详解
openerp-server.conf ---------------- [options]; addons模块的查找路径addons_path = E:\GreenOdoo8.0\source\op ...
- SpringMVC Controller详解
SpringMVC Controller 介绍 一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理 ...
- JMeter之Throughput Controller详解(实验)
Throughput Contoller,直译是吞吐量控制器,它是用来控制该控制器下面元件的执行次数,与控制吞吐量的功能无关.(注:用Constant Throughput Timer可以控制吞吐量. ...
- odoo配置文件详解
addons模块的查找路径 addons_path = D:\odoo\Odoo 10.0\server\odoo\addons 超级管理员(用于创建,还原和备份数据库的操作) admin_passw ...
- SpringMVC框架02——SpringMVC的Controller详解
1.基于注解的控制器 1.1.@Controller 注解类型 在SpringMVC中使用org.springframework.stereotype.Controller注解类型声明某类的实例是一个 ...
- jmeter 逻辑控制器Logic Controller详解
Jmeter之逻辑控制器(Logic Controller) 前言: 1. Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in w ...
- odoo domain详解
参考的以下文档: luohuayong:Odoo domain写法及运用 baimo:odoo domain表达式 1.domain 表达式规则 最简单的格式:[('字段名','操作符',值)] 例: ...
随机推荐
- 洛谷p3916图的遍历题解
题面 思路: 反向建边,dfs艹咋想出来的啊 倒着遍历,如果你现在遍历到的这个点已经被标记了祖先是谁了 那么就continue掉 因为如果被标记了就说明前面已经遍历过了 而我们的顺序倒着来的 前边的一 ...
- 如何计算假设检验的功效(power)和效应量(effect size)?
做完一个假设检验之后,如果结果具有统计显著性,那么还需要继续计算其效应量,如果结果不具有统计显著性,并且还需要继续进行决策的话,那么需要计算功效. 功效(power):正确拒绝原假设的概率,记作1-β ...
- Docer安装及简单使用
前提条件 如果是CentOS8,可以参考这篇文章centos8.0安装docker Docker 运行在 CentOS 7 上,要求系统为64位.系统内核版本为 3.10 以上. Docker 运行在 ...
- 2-1docker图形管理界面
1.Portainer Shipyard:(停止维护) https://github.com/shipyard/shipyard https://www.portainer.io/installati ...
- Python下的XML-RPC客户端和服务端实现(基于xmlrpclib SimpleXMLRPCServer 模块)
RPC是Remote Procedure Call的缩写,翻译成中文就是远程方法调用,是一种在本地的机器上调用远端机器上的一个过程(方法)的技术,这个过程也被大家称为“分布式计算”,是为了提高各个分立 ...
- Linux内核模块管理命令
1.insmod命令 在Linux系统下,insmod命令用于将给定的模块加载到内核中去,Linux系统有许多功能是通过模块的方式,在需要时才载入kernel,这样做可以使kernel较为精简,进而提 ...
- spring cloud 服务容错保护 - Hystrix
1.为什么要断路器 在微服务架构中通常会涉及到多个服务间调用,处于调用链路底层的基础服务故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应.服务雪崩效应是一种因“服务提供 ...
- Java基础知识点总结(一)
1.源文件声明规则2.JAVA基本类型void3.数据类型默认值4.自动类型转换5.Java变量类型6.Java局部变量7.访问控制修饰符8.父类与子类的访问控制9.instanceof运算符 1.源 ...
- python学习之旅
python学习分类 python基础 +- day01——python初始.变量.常量.注释.基础数据类型.输入.if day02——while.字符串格式化.运算符.编码初识 day03—— ...
- Scala Types 1
在 Scala 中所有值都有一种对应的类型 单例类型 形式:value.type,返回类型 value / null 场景1:链式API调用时的类型指定 class Super { def m1(t: ...