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

一:路由

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

route -- 字符串或数组,决定哪个http请求匹配所装饰的方法,可以是单个字符串、或多个字符串的数组
type -- 请求的类型,可以是http或json
auth -- 认证方法的类型,可以是以下几种:
user - 必须是认证的用户,该请求基于已认证的用户
public - 当不通过认证访问时使用公用的认证
none - 相应的方法总是可用,一般用于框架和认证模块,对应请求没有办法访问数据库或指向数据库的设置
methods 这个请求所应用的一系列http方法,如果没指定则是所有方法
cors 跨域资源cors参数
csrf(boolean) 是否开启CSRF保护,默认True
1.如果表单是用python代码生成的,可通过request.csrf_token() 获取csrf
2.如果表单是用javascript生成的,CSRF token会自动被添加到QWEB环境变量中,通过require('web.core').csrf_token使用
3.如果终端可从其他地方以api或webhook形式调用,需要将对应的csrf禁用,此时最好用其他方式进行验证

二:请求

请求对象在收到请求时自动设置到odoo.http.request。

class odoo.http.WebRequest(httprequest)

所有odoo WEB请求的父类,一般用于进行请求对象的初始化:

httprequest 原始的werkzeug.wrappers.Request对象
params 请求参数的映射
cr 当前方法调用的初始游标,当使用none的认证方式时读取游标会报错
context 当前请求的上下文键值映射
env 绑定到当前请求的环境
session 储存当前请求session数据的OpenERPSession
debug 指定当前请求是否是debug模式
db 当前请求所关联的数据库,当使用none认证时为None
csrf_token(time_limit=3600) 为该请求生成并返回一个token(参数以秒计算,默认1小时,如果传None表示与当前用户session时间相同)

class odoo.http.HttpRequest(*args)

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

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

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

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

参数:
data (basestring) -- 响应主体
headers ([(name, value)]) -- http响应头
cookies (collections.Mapping) -- 发送给客户端的cookie

not_found(description=None)

给出404 NOT FOUND响应

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

渲染qweb模板,在调度完成后会对给定的模板进行渲染:

参数:
template (basestring) -- 用于渲染的模板
qcontext (dict) -- 用于渲染的上下文环境
lazy (bool) -- 渲染动作是否应该拖延到最后执行
kw -- 转发到werkzeug响应对象

class odoo.http.JsonRequest(*args)

处理通过http发来的json rpc格式请求:

说明:
1.method -- 忽略
2.params -- 须是一个json格式对象
3.处理方法返回的结果是一个json-rpc格式的,以JSON-RPC Response对象的形式组装

三:响应

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

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

template (basestring) -- 用于渲染的模板
qcontext (dict) -- 用在渲染中的上下文环境
uid (int) -- 用于调用ir.ui.view渲染的用户id,None时使用当前请求的id

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

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

四:控制器

一般通过继承的形式创建:class odoo.http.Controller

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

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

odoo10学习笔记十二:web controller的更多相关文章

  1. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

  2. Go语言学习笔记十二: 范围(Range)

    Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...

  3. java jvm学习笔记十二(访问控制器的栈校验机制)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 本节源码:http://download.csdn.net/detail/yfqnihao/4863854 这一节,我们 ...

  4. (C/C++学习笔记) 十二. 指针

    十二. 指针 ● 基本概念 位系统下为4字节(8位十六进制数),在64位系统下为8字节(16位十六进制数) 进制表示的, 内存地址不占用内存空间 指针本身是一种数据类型, 它可以指向int, char ...

  5. Python学习笔记(十二)—Python3中pip包管理工具的安装【转】

    本文转载自:https://blog.csdn.net/sinat_14849739/article/details/79101529 版权声明:本文为博主原创文章,未经博主允许不得转载. https ...

  6. JavaBean(web基础学习笔记十二)

    一.JavaBean简介 JavaBean是使用Java语言开发的一个可重用的组件,在JSP的开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁.JSP搭配JavaBean来使用 ...

  7. ROS学习笔记十二:使用gazebo在ROS中仿真

    想要在ROS系统中对我们的机器人进行仿真,需要使用gazebo. gazebo是一种适用于复杂室内多机器人和室外环境的仿真环境.它能够在三维环境中对多个机器人.传感器及物体进行仿真,产生实际传感器反馈 ...

  8. python 学习笔记十五 web框架

    python Web程序 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. Python的WEB框架分为两类: 自己写socket,自 ...

  9. yii2源码学习笔记(十二)

    继续了解controller基类. /** * Runs a request specified in terms of a route.在路径中指定的请求. * The route can be e ...

随机推荐

  1. 【bzoj2648】SJY摆棋子(kdtree)

    传送门 题意: 二维平面上有若干个点. 现在要维护一种数据结构,支持插入一个点以及询问其余点到某个点的最小曼哈顿距离. 思路: 这是个\(kdtree\)模板题. \(kdtree\)是一种可以高效处 ...

  2. 6. Go语言—字符串操作

    一.字符串支持的转义字符 \r 回车符(返回行首) \n 换行符(直接跳到下一行的同列位置) \t 制表符 \' 单引号 \" 双引号 \\ 反斜杠 \uXXXX Unicode字符码值转义 ...

  3. linux下C/C++编译时系统搜索 include 和 链接库 文件路径的指定

     C/C++程序在linux下被编译和连接时,GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径.自己指定的路径就不说了,这里说明一下系统自动搜索的路径.   ...

  4. LG4824 「USACO2015FEB」(Silver)Censoring KMP+栈

    问题描述 LG4824 题解 大概需要回顾(看了题解) KMP 先对要删除的 模式串 进行自我匹配,求出 \(\mathrm{fail}\) 然后再扫 文本串 的过程中记录一下每个字符匹配的最大长度, ...

  5. numpy-数据清洗

    一.对G列数据进行清洗,根据['无','2000-3999','4000-5999','6000-7999','8000-9999','>10000']进行划分 去处重复值 # 删除重复值 # ...

  6. React内容

    React Fiber   16版本 registerServiceWorker 的作用 PWA  progressive web application  写手机app应用   在断网的情况下,第二 ...

  7. [Algorithm] 1290. Convert Binary Number in a Linked List to Integer

    Given head which is a reference node to a singly-linked list. The value of each node in the linked l ...

  8. 002Excel冻结窗口(冻结第二行)

    不知道是最近状态不好还是怎么回事Excel冻结前面两行居然弄了很久,而工作上又急需,为此还是记录一下 其实超级简单(不会的话就很难) 如果冻结一行 这个非常简单 那么冻结前面两行呢?我研究了很久,其实 ...

  9. 基于Nginx和openssl实现https

    [root@localhost ssl]# yum -y install openssl [root@localhost ssl]# mkdir /usr/local/nginx/conf/ssl/ ...

  10. C++ 基于rapidjson对json字符串的进行序列化与反序列化

    json字符串的解析以封装在我们开发过程中经常见到, 尤其在socket通信上面, 在一次项目中碰到json字符串的进行解析, 而公司有没有封装好的库, 于是就自己基于开源的库进行了一次封装, 接下是 ...