环境

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 学习总结的更多相关文章

  1. Odoo Web Service API

    来自 Odoo Web服务暴露出相关的服务,路由分别是 /xmlrpc/ /xmlrpc/2/ /jsonrpc 根据 services 调用 后端对应服务的 方法method [定义 openerp ...

  2. ASP.NET MVC Web API 学习笔记---第一个Web API程序

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

  3. odoo web controller

    Routing openerp.http.route(route=None, **kw) Decorator marking the decorated method as being a handl ...

  4. 【odoo14】第十六章、odoo web库(OWL)

    odoo14引入了名为OWL(Odoo Web Library)的JavaScript框架.OWL是以组件为基础的UI框架,通过QWeb模板作为架构.OWL与传统的组件系统相比更快,并引入了一些新的特 ...

  5. 每天成长一点---WEB前端学习入门笔记

    WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...

  6. 【web前端学习部落22群】分享 碰撞的小球开源小案例

    对于课程中的疑问,大家可以加 web前端学习部落22群 120342833和其他老师还有众多的小伙伴们进行沟通交流哦,群里还有不少技术大拿.行业大牛 可以一起探讨问题,我们也会安排专业的技术老师为大家 ...

  7. web前端学习部落22群开源分享 左边菜单导航

    有大量web前端开发工具及学习资料,可以搜群[ web前端学习部落22群 ]进行下载,遇到学习问题也可以问群内专家以及课程老师哟 <!DOCTYPE html> <html lang ...

  8. 【前端】移动端Web开发学习笔记【2】 & flex布局

    上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...

  9. 【前端】移动端Web开发学习笔记【1】

    下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...

  10. 【前端】Web前端学习笔记【2】

    [2016.02.22至今]的学习笔记. 相关博客: Web前端学习笔记[1] 1. this在 JavaScript 中主要有以下五种使用场景 在全局函数调用中,this 绑定全局对象,浏览器环境全 ...

随机推荐

  1. MIsc writeup

    1. 杂项 图片里面有什么 ,附件为一张图片 通过Binwalk查看发现有压缩包,通过foremost分离一下. 打开输出文件,发现里面有两个图片. 00000000.png是原图,00000722. ...

  2. 虚拟网络VLAN

    一.VLAN划分基础 1.VLAN概念 VLAN叫做虚拟局域网,逻辑上将网络划分 2.VLAN的分类 静态vlan:基于端口划分静态VLAN 动态vlan:基于MAC地址划分动态VLAN 3.VLAN ...

  3. 多种方法实现单例模式 pickle模块

    目录 单例模式 类方法@classmethod实现 元类实现 模块实现 装饰器实现 双下call.反射实现 pickle序列化模块 单例模式 比如系统调用打印机,不管你要打印几次,都是调用同一个打印机 ...

  4. 【转载】SQL SERVER 存储过程中执行动态Sql语句

    MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有.还有一个最大的好处就 ...

  5. Cesium for Unreal加载倾斜摄影

    本文介绍UE4中通过Cesium插架加载本地倾斜摄影模型.Cesium for Unreal插件运行在UE环境何总运行Cesium,这样方便做一个GIS应用. 安装Cesium for Unreal插 ...

  6. 发布了一个jar包到中央仓库,我的心好累…

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是Hydra. 前几天我在网上冲浪的时候,看见有一个老铁在git上给我提了一个issue: 万万没想到,有一天我写的烂代码居然也 ...

  7. [Leetcode]扁平化多级双向链表

    题目   https://leetcode-cn.com/explore/learn/card/linked-list/197/conclusion/764/ 代码 /* // Definition ...

  8. MySQL union 和 order by 同时使用

    目录 一.出现错误的情况 二.解决上述问题的两种方法 三.案例分析: 求解: 常见的错误解法 (1)使用 union 和 多个order by 不加括号 [报错] (2)order by 在 unio ...

  9. Mybatis理解

    MyBatis学习及理解 1.Mybatis简介 MyBatis是一款优秀的持久层框架,他支持定制化SQL文件.存储过程以及高级映射.避免了JDBC代码和手动设置参数以及获取结果集,Mybatis可以 ...

  10. C#开发PACS医学影像三维重建(十四):基于能量模型算法将曲面牙床展开至二维平面

    在医学影像领域中,将三维重建中的人体组织展开平铺至二维,用来研判病灶和制定治疗方案的重要手段之一, 它能够将立体曲面所包含的信息更为直观的展示到二维平面上,常用的情景包括: 牙床全景图.平铺血管.骨骼 ...