环境

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. ORM数据库查询优化only与defer(select_related与prefetch_related)

    目录 一:数据库查询优化 1.ORM语句特点 2.only 3.defer 4.only与defer区别 5.select_related与prefetch_related 6.select_rela ...

  2. nuxt 登录注册加重置密码

    <!-- 登录弹框 --> <div class="mask" v-show="flag"> <div class="m ...

  3. 解决scapy库下找不到IP,TCP模板的问题

    scapy版本: 问题描述: 我看到书中导入TCP,IP模块是通过from scapy.all import TCP,IP 上机实验发现找不到这个模块,通过大量查找发现此模块在最新版本中转移到其他包里 ...

  4. sniff()函数的总结

    作用: sniff()函数主要是用来捕获经过本机网卡的数据包 格式: sniff(filter="",iface="any",prn=function,coun ...

  5. vlc qt player 播放器开发实例

    (一)VLC-Qt下载 官网地址:https://vlc-qt.tano.si/ Github 地址:https://github.com/vlc-qt 示例地址:https://github.com ...

  6. [R语言] ggplot2入门笔记3—通用教程如何自定义ggplot2

    通用教程简介(Introduction To ggplot2) 代码下载地址 以前,我们看到了使用ggplot2软件包制作图表的简短教程.它很快涉及制作ggplot的各个方面.现在,这是一个完整而完整 ...

  7. [R语言] ggplot2入门笔记4—前50个ggplot2可视化效果

    文章目录 通用教程简介(Introduction To ggplot2) 4 ggplot2入门笔记4-前50个ggplot2可视化效果 1 相关性(Correlation) 1.1 散点图(Scat ...

  8. python之路24之 面向对象动静态方法、继承、派生

    昨日内容回顾 人狗大战 1.直接使用字典表示人和狗 p1 = {} p2 = {} p3 = {} p4 = {} 2.封装产生人和狗的函数 def crreate_person():pass def ...

  9. [WPF]颜色主题功能

    效果 点击选择皮肤颜色 代码 public enum Themes { Blue, Gray, Orange } /// <summary> /// 主题颜色管理类 /// </su ...

  10. Linux基础操作-01

    Linux操作系统 很多IC设计的EDA工具都是在Linux系统中进行运行的,在IC设计的从业者都需要熟练掌握Linux操做.可以不掌握Linux原理,但是操作要熟练. Linux 操作系统的特点 多 ...