首页 > 其他分享 >odoo Web Controllers 学习总结

odoo Web Controllers 学习总结

时间:2023-05-04 11:32:41浏览次数:59  
标签:Web http route 身份验证 Controllers odoo return self 路由

环境

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从公共身份验证更改为用户身份验证(需要登录)

一个简单示例

代码组织结构如下:

odoo Web Controllers 学习总结_接口开发

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

验证

odoo Web Controllers 学习总结_odoo controller_02

服务端控制台输出请求参数:

{'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

作者:授客

Git地址:https://gitee.com/ishouke


友情提示:限于时间仓促,文中可能存在错误,欢迎指正、评论!

标签:Web,http,route,身份验证,Controllers,odoo,return,self,路由
From: https://blog.51cto.com/shouke/6242038

相关文章

  • Odoo14 Tree视图创建按钮后面增加按钮
    1.继承ListView.buttons,在其按钮后面增加我们自定义的按钮,通过widget的一些属性去判断按钮的显示<templatesid="list_import_shipping_button_create"xml:space="preserve"><tt-extend="ListView.buttons"><tt-jquery="div.o_list_buttons&......
  • Web组态可视化软件之BY组态可视化平台介绍
    Web组态可视化软件之BY组态可视化平台介绍关于组态软件,首先要从组态的概念开始说起。 什么是组态组态(Configure)的概念来自于20世纪70年代中期出现的第一代集散控制系统(DistributedControlSystem),可以理解为“配置”、“设定”、“设置”等,是指通过人机开发界面,用类似“搭积木......
  • Web组态可视化软件之BY组态可视化平台介绍
    关于组态软件,首先要从组态的概念开始说起。什么是组态组态(Configure)的概念来自于20世纪70年代中期出现的第一代集散控制系统(DistributedControlSystem),可以理解为“配置”、“设定”、“设置”等,是指通过人机开发界面,用类似“搭积木”的简单方式来搭建软件功能,而不需要编写计算机......
  • 【web 开发基础】PHP 中的递归函数
    前言什么是递归?递归做为一种算法在程序设计语言中广泛应用。所谓的递归简单地概括就是程序调用自身的编程技巧称为递归(recursion)。递归在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学......
  • 常见问题——关于.net WebApi使用Swagger报错:HTTP Error 403.14 - Forbidden
    问题:.netWebApi项目使用Swagger报错:HTTPError403.14-Forbidden解放方案:换一个端口即可推荐——删除解决方案下的.vs文件夹,重新生成即可参考:https://stackoverflow.com/questions/34970088/swagger-gives-me-http-error-403-14-forbidden/53863456......
  • chatGPT问答之 Webpack 5 多入口打包如何指定打包文件名规定的文件名
    前言chatGPT越来越令人惊奇,有一些答案在百度上搜半天却找不到你想要的,但与chatGPT的聊天中就可以非常快的得到你想要的结果,不得不说人工智能很好用下面就是我与chatGPT的聊天内容chatGPT问答之Webpack5多入口打包如何指定打包文件名规定的文件名问1:Webpack5多入口打包如......
  • 【Web】前端框架对微软老旧浏览器的支持
    零、原因最近要做一个项目,要能在学校机房运行的,也要在手机上运行。电脑和手机,一次性开发,那最好的就是响应式前端框架了。手机和正常的电脑兼容性问题应该都不大,但是学校机房都是Win7的系统,自带的都是IE8的浏览器。虽然有安装谷歌浏览器、360浏览器啥的,但是默认的还是IE浏览器。这......
  • unity发布到4399的webgl模式问题:FRAMEWORK.JS中的WEBREQUEST_SEND括号内的函数(不能有
    在发布4399的时候,之前遇到过这个问题,解决方法当然就是删除这个函数啦。步骤也很简单,但是刚开始摸不着头脑搞了好久,最后发现发布的时候有个加密选项,选择不加密,后面build的文件里面就可以进行打开修改,按照要求修改函数即可。......
  • 解决web项目上的小蓝点没了的问题
    设置中打开,ProjectStructure 里面的web项目没了啊,我靠,我都不知道为什么。没关系,创建一个就可以了,就会出现一个这样的小蓝点......
  • websocket介绍
    特点:1.可以在浏览器里使用2.支持双向通信3.使用简单全双工异步通信,tcp协议服用http握手通道优点:1.双向通信,实时性更强。2.更好的二进制支持3.较少的控制开销。连接创建后,ws客户端、服务端进行数据交换时,协议控制的数据包头部较小。在不包含头部的情况下,服务端到客户端的......