odoo Web Controllers 学习总结
环境
odoo-14.0.post20221212.tar
Web Controllers
Controllers
控制器需要提供可扩展性,就像Model,但不能使用相同的机制,因为先决条件(已加载模块的数据库)可能还不可用(例如,未创建数据库或未选择数据库)。
因此,控制器提供了自己的与模型的扩展机制:
通过继承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从公共身份验证更改为用户身份验证(需要登录)
一个简单示例
代码组织结构如下:

odoo14\custom\estate\controllers\controller.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from odoo import http
import json
class TestApi(http.Controller):
@http.route('/test-api-service/testService/testReq', type='http',
auth="public", methods=['POST'], csrf=False, cors='*')
def test_api(self, **kwargs):
try:
print(kwargs)
return json.dumps({'code': 200, 'msg': '请求成功'}, ensure_ascii=False)
except Exception as e:
return json.dumps({'code': 500, 'msg': '%s' % e}, ensure_ascii=False)
注意:不能直接返回json字典,bool值等,会提示不可返回不可调用对象,但是可直接返回字符串,或者返回字符串的函数,如下:
class TestApi(http.Controller):
@http.route('/test-api-service/testService/testReq', type='http',
auth="public", methods=['POST'], csrf=False, cors='*')
def test_api(self, **kwargs):
try:
return self.get_result()
except Exception as e:
return json.dumps({'code': 500, 'msg': '%s' % e}, ensure_ascii=False)
def get_result(self, *args):
return '请求成功'
odoo14\custom\estate\controllers\__init__.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from . import controller
odoo14\custom\estate\__init__.py
from . import models
from . import controllers
验证

服务端控制台输出请求参数:
{'arg1': 'value1', 'arg2': 'value2'}
API
Routing
odoo.http.route(route=None, **kw)[源代码]
修饰器将被修饰的方法标记为请求的处理程序。该方法必须是Controller子类的一部分
参数:
route – 字符或者数组。将确定哪些http请求将匹配被修饰方法的路由部分。可以是单个字符串或字符串数组。有关路由表达式的格式,请参见werkzeug的路由文档(http://werkzeug.pocoo.org/docs/routing/ )。
type – 请求类型,可选值:
'http'、'json'auth –
身份验证方法的类型,可以是以下类型之一:
user: 用户必须经过身份验证,执行当前请求的用户,必须具有对应的执行权限public: 用户可能已经过身份验证,也可能没有经过身份证验证。如果没经过身份验证,使用共享公共用户(Public user)执行当前请求。none: 即使没有数据库,该方法也始终处于活动状态。主要由框架和认证模块使用。请求代码没有任何访问数据库的设施,也没有任何指示当前数据库或当前用户的配置。
methods – 此路由所应用的一系列http方法。如果未指定,则允许使用所有方法。
cors – Access-Control-Allow-Origin cors 指令值
csrf (bool) –
是否为该路由开启CSRF 保护。
默认为
True。查看CSRF Protection 获取更多信息。
参考连接
https://www.odoo.com/documentation/14.0/zh_CN/developer/reference/addons/http.html
odoo Web Controllers 学习总结的更多相关文章
- Odoo Web Service API
来自 Odoo Web服务暴露出相关的服务,路由分别是 /xmlrpc/ /xmlrpc/2/ /jsonrpc 根据 services 调用 后端对应服务的 方法method [定义 openerp ...
- ASP.NET MVC Web API 学习笔记---第一个Web API程序
http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...
- odoo web controller
Routing openerp.http.route(route=None, **kw) Decorator marking the decorated method as being a handl ...
- 【odoo14】第十六章、odoo web库(OWL)
odoo14引入了名为OWL(Odoo Web Library)的JavaScript框架.OWL是以组件为基础的UI框架,通过QWeb模板作为架构.OWL与传统的组件系统相比更快,并引入了一些新的特 ...
- 每天成长一点---WEB前端学习入门笔记
WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...
- 【web前端学习部落22群】分享 碰撞的小球开源小案例
对于课程中的疑问,大家可以加 web前端学习部落22群 120342833和其他老师还有众多的小伙伴们进行沟通交流哦,群里还有不少技术大拿.行业大牛 可以一起探讨问题,我们也会安排专业的技术老师为大家 ...
- web前端学习部落22群开源分享 左边菜单导航
有大量web前端开发工具及学习资料,可以搜群[ web前端学习部落22群 ]进行下载,遇到学习问题也可以问群内专家以及课程老师哟 <!DOCTYPE html> <html lang ...
- 【前端】移动端Web开发学习笔记【2】 & flex布局
上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...
- 【前端】移动端Web开发学习笔记【1】
下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...
- 【前端】Web前端学习笔记【2】
[2016.02.22至今]的学习笔记. 相关博客: Web前端学习笔记[1] 1. this在 JavaScript 中主要有以下五种使用场景 在全局函数调用中,this 绑定全局对象,浏览器环境全 ...
随机推荐
- JDBC中文乱码问题
解决JDBC中文数据存入数据库乱码问题 ?useUnicode=true&characterEncoding=utf-8
- 使用Python库pyqt5制作TXT阅读器(一)-------UI设计
项目地址:https://github.com/pikeduo/TXTReader PyQt5中文手册:https://maicss.gitbook.io/pyqt-chinese-tutoral/p ...
- python之路38 SQL注入问题 索引触发器 事务 存储过程 函数 流程控制
SQL注入问题 怪像1:输对用户名就可以登录成功 怪像2:不需要对的用户名和密码也可以登录成功 SQL注入:利用特殊符号的组合产生特殊的含义 从而避开正常的业务逻辑 select * from use ...
- SSM框架——Spring
Spring 轻量级.非侵入式的框架 支持控制反转(IOC).面向切面编程(AOP) 支持事务的处理和声明.框架整合 1.HelloSpring(入门) 1.1导入依赖 <!-- https:/ ...
- C#调用js库的方法
前言 用.net6开发一个Winform程序,处理Excel文件,并把结果导出Excel文件. 要用到两个算法,一是turf.js库的booleanPointInPolygon方法,判断经纬度坐标是否 ...
- CSS文字超出宽度---换行总结
2021-5-5重新总结---CSS文字超出宽度---附代码 <!DOCTYPE html> <html lang="en"> <head> ...
- 【学习笔记】珂朵莉树(ODT)
珂朵莉树 \(\tt 0x00\) 起源 起源于 CodeForces 的一题 CF896C,当时出题人提供了这种做法,在随机数据下均摊复杂度比较优秀. 正统名字好像叫颜色段均摊,由于题目也得名于 \ ...
- Dubbo2.7的Dubbo SPI实现原理细节
总结/朱季谦 本文主要记录我对Dubbo SPI实现原理的理解,至于什么是SPI,我这里就不像其他博文一样详细地从概念再到Java SPI细细分析了,直接开门见山来分享我对Dubbo SPI的见解. ...
- 大佬们的博客 && 友链
博客 1.https://wiki.kimleo.net/ 查组合子查到的,活化石级别 2.https://tech.meituan.com/ 美团博客,查函数式查到的,我还看过一篇讲aop的非常经典 ...
- Containers feature is disabled. Enable it using the PowerShell script (in an administrative PowerShe
1.问题如题如下图 2.解决办法 以管理员身份运行Window Terminal(Windows PowerShell),输入图上下方所示命令 Enable-WindowsOptionalFeatur ...