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
最新文章
- 7.2 数据注解属性--TimeStamp特性【Code-First 系列】
- Java 23种设计模式 (通俗易懂解释收集整理)
- jquery1.9+获取append后的动态元素
- javascript 内置对象
- mac 版本的 Google 网盘 走代理
- JavaScript中的Function(函数)对象
- mysql优化之索引优化
- JAVA中toString方法的作用(转)
- ExtJS得知--------Ext.Element学习的查询方法(示例)
- 使用C#系统服务定时执行操作
- pstree:command not found
- 工控随笔_03_西门子_Step7项目打开后CPU显示问号解决方法
- (20/24) webpack实战技巧:watch实现热打包和添加代码备注
- IDEA项目搭建十——使用slf4j和logback进行日志记录
- sparse 稀疏函数的用法
- Java 8- Java 分支结构 - if…else/switch
- P1341 无序字母对
- MATLAB中的集合运算
- gitlab runner 配置
- Java事务管理之Hibernate
热门文章
- <;三>;function函数对象类型的应用示例
- echarts map地图中绘制浙江省市区县乡镇多级联动边界下钻的最新geojson数据文件获取和更新
- Django静态文件配置、form表单、request对象、连接数据库、ORM
- STL vector常用API
- WireShark抓包入门教学
- Apache Kafka 的基本概念
- 巧用Fiddler开启运营商定制版路由器被阉割的功能,免去刷公版固件的风险
- [cocos2d-x]飞机大战 遇到的bug和总结(一)
- sikulix___自动化办公___重复性_机械性_的电脑操作___python脚本___Java运行环境下德jar包完成自动化测试相关___截图编程控制键盘鼠标
- 交叉编译esp8089