odoo Web Controllers 学习总结

简介: 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

目录
相关文章
|
5月前
|
资源调度 JavaScript 前端开发
IM跨平台技术学习(十一):环信基于Electron打包Web IM桌面端的技术实践
这次借着论证 Web IM端 SDK 是否可以在 Electron 生成的桌面端正常稳定使用,我决定把官方新推出的 webim-vue3-demo,打包到桌面端,并记录了这次验证的过程以及所遇到的问题和解决方法。
95 2
|
1月前
|
机器学习/深度学习 移动开发 JavaScript
Web实时通信的学习之旅:SSE(Server-Sent Events)的技术详解及简单示例演示
Web实时通信的学习之旅:SSE(Server-Sent Events)的技术详解及简单示例演示
162 0
|
1月前
|
网络协议 API 网络安全
Web实时通信的学习之旅:轮询、WebSocket、SSE的区别以及优缺点
Web实时通信的学习之旅:轮询、WebSocket、SSE的区别以及优缺点
159 0
|
1月前
|
网络协议 安全 JavaScript
Web实时通信的学习之旅:WebSocket入门指南及示例演示
Web实时通信的学习之旅:WebSocket入门指南及示例演示
144 0
|
1月前
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
142 0
|
4月前
|
JSON 中间件 数据处理
实践出真知:通过项目学习Python Web框架的路由与中间件设计
【7月更文挑战第19天】探索Python Web开发,掌握Flask或Django的关键在于理解路由和中间件。路由连接URL与功能,如Flask中@app.route()定义请求响应路径。中间件在请求处理前后执行,提供扩展功能,如日志、认证。通过实践项目,不仅学习理论,还能提升构建高效Web应用的能力。示例代码展示路由定义及模拟中间件行为,强调动手实践的重要性。
59 1
|
5月前
|
前端开发 JavaScript 开发工具
Web前端开发学习资料:深度探索与开发实践
Web前端开发学习资料:深度探索与开发实践
44 3
|
6月前
|
JSON Go 数据格式
golang学习7,glang的web的restful接口结构体传参
golang学习7,glang的web的restful接口结构体传参
|
6月前
|
JSON Go 数据格式
golang学习6,glang的web的restful接口传参
golang学习6,glang的web的restful接口传参
|
6月前
|
Web App开发 前端开发 JavaScript
学习Web标准
【5月更文挑战第1天】学习Web标准
49 6
下一篇
无影云桌面