首页 > 其他分享 >odoo controller

odoo controller

时间:2023-10-25 11:12:38浏览次数:36  
标签:http 请求 渲染 响应 controller 参数 odoo

一:Controller

    一般通过继承的形式来创建controller类,继承自odoo.http.Controller。

    以route装饰器来装饰定义的方法,提供url路由访问路径:

class MyController(odoo.http.Controller)://继承controller定义控制器
    @route('/some_url', auth='public')//装饰器路由访问方法,并指明访问方式:公开还是需要用户登陆
    def handler(self):
        return stuff()

 

二:路由映射相关

    odoo.http.route(route=None, **kw) 装饰器可以将对应方法装饰为处理对应的http请求。

    装饰器参数有:

    1)route

    字符串或数组,决定哪些http请求可以匹配所装饰的方法,可以是单个字符串、或多个字符串的数组。

    2)type

    请求的类型,可以是http或json。

    3)auth

    认证方法的类型,可以是以下几种:

        user - 必须是已通过登录认证的用户,才能访问该请求。如果未经过登录直接访问,则会拦截并跳转回odoo登录页面。

        public - 使用公用的认证,可以不经过登录验证直接访问。

        none - 相应的方法总是可用,一般用于框架和认证模块,对应请求没有办法访问数据库或指向数据库的设置。

    4)methods

    这个请求所应用的一系列http方法【PATCH, POST, PUT, 或者DELETE】,如果没指定则是所有方法。

 methods=['POST', 'GET']

    5)cors

    跨域资源cors参数。

    6)csrf(boolean)

    是否开启CSRF跨域保护,默认True。

        a)如果表单是用python代码生成的,可通过request.csrf_token() 获取csrf

        b)如果表单是用javascript生成的,CSRF token会自动被添加到QWEB环境变量中,通过require('web.core').csrf_token获取

        c)如果终端可从其他地方以api或webhook形式调用,需要将对应的csrf禁用,此时最好用其他方式进行验证

 

三:请求相关

    请求对象在收到请求时自动设置到odoo.http.request,可以通过该对象提前request中携带的 参数、cookie、session对象等。

   跟请求相关的类和函数有以下几种:

   1:class odoo.http.WebRequest(httprequest)

   所有odoo WEB请求的父类,一般用于进行请求对象的初始化,其构建函数的参数有:

    1)httprequest

    原始的werkzeug.wrappers.Request对象

    2)params

    请求参数的映射

    3)cr

    当前方法调用的初始游标,当使用none的认证方式时读取游标会报错

    4)context

    当前请求的上下文键值映射

    5)env

    绑定到当前请求的环境

    6)session

    储存当前请求session数据的OpenERPSession

    7)debug

    指定当前请求是否是debug模式

    8)db

    当前请求所关联的数据库,当使用none认证时为None

    9)csrf_token(time_limit=3600)

    为该请求生成并返回一个token(参数以秒计算,默认1小时,如果传None表示与当前用户session时间相同)

 

    2:class odoo.http.HttpRequest(*args)

    用于处理http类型请求的函数,匹配 路由参数、查询参数、表格参数,如果有指定文件也会传给该方法。为防止重名,路由参数优先级最高。
    该函数的返回值有三种:

    • 无效值,HTTP响应会返回一个204(没有内容)
    • 一个werkzeug 响应对象
    • 一个字符串或unicode,会被响应对象包装并使用HTML解析

 

    3:make_response(data, headers=None, cookies=None)

    用于生成没有HTML的响应 或 自定义响应头、cookie的html响应。
    由于处理函数只以字符串形式返回html标记内容,需要组成一个完整的响应对象,这样客户端才能解析

    参数有:

    1)data (basestring)

    响应主体。

    2)headers ([(name, value)])

    http响应头。

    3)cookies (collections.Mapping)

    发送给客户端的cookie。

 

    4:not_found(description=None)

    给出404 NOT FOUND响应。

 

    5:render(template, qcontext=None, lazy=True, **kw)

    渲染qweb模板,在调度完成后会对给定的模板进行渲染并返回给客户端。

    参数有:

    1)template (basestring)

    用于渲染的模板完整ID:模块.模版

    2)qcontext (dict)

    用于渲染的上下文环境。

    3)lazy (bool)

   渲染动作是否应该拖延到最后执行。

    4)kw

    转发到werkzeug响应对象。

 

    6:class odoo.http.JsonRequest(*args)

    处理通过http发来的json rpc请求。

    参数:params -- 是一个json格式对象

    返回值:一个json-rpc格式的,以JSON-RPC Response对象的组装。

 

四:响应相关

    1:class odoo.http.Response(args, *kw)

    响应对象通过控制器的路由传递,在werkzeug.wrappers.Response之外,该类的构造方法会添加以下参数到qweb的渲染中:

    1)template (basestring)

    用于渲染的模板。

    2)qcontext (dict)

    用在渲染中的上下文环境。

    3)uid (int)

    用于调用ir.ui.view渲染的用户id,None时使用当前请求的id。

    上面的参数在实际渲染之前可以随时作为Response对象的属性进行修改。

 

    response对象可以调用以下方法:

    • render() - 渲染响应对象的模板,并返回内容。
    • flatten() - 强制渲染响应对象的模板,将结果设置为响应主体,并将模板复原。

标签:http,请求,渲染,响应,controller,参数,odoo
From: https://www.cnblogs.com/pythonClub/p/17786666.html

相关文章

  • odoo 加用户
     加用户definsert(self,info):a=self.env['hr.department'].create({'name':info['orgcode_show']})b=self.env['hr.employee'].create({'name':info['USERNAME'],......
  • @Controller和@RestController的区别
    总体上,@Controller和@RestController都是SpringMVC框架中的注解,用于标识一个类是SpringMVCcontroller处理器,可以接收HTTP请求。但它们在处理请求和返回结果方面存在一些不同。返回类型:@Controller:如果使用@Controller注解,那么类中的方法可以直接通过返回String跳转到jsp、......
  • 一些改动 \odoo\addons\web\static\src\webclient\user_menu\user_menu_items
      一些改动\odoo\addons\web\static\src\webclient\user_menu\user_menu_items.jsregistry.category("user_menuitems")//.add("documentation",documentationItem)//.add("support",supportItem).add("sho......
  • laravel:中间件给controller传递参数(10.27.0)
    一,相关文档https://learnku.com/docs/laravel/10.x/middleware/14846二,php代码1,middleware12345678910111213141516171819202122232425<?php namespaceApp\Http\Middleware; useClosure;useIlluminate\Http\Request;useS......
  • Odoo16.0 对接17Track
    17TRACK是一家集全球物流快递包裹为一体的查询平台。本文将介绍如何使用odoo与17Track对接,完成物流单号的查询工作。模块安装与配置首先,我们在系统中安装17track模块 安装完成后,我们需要在系统-设置-系统参数中设置从17Track官网申请的AccessToken。 激活承运商......
  • Nest.js Controller 解析:探索路由和请求处理的强大功能
    Controller 它主要是负责特定路由请求处理并将响应结果返回给客户端。每个控制器它会有多个路由,不同路由对应不同的业务请求处理。在Nest 中,创建一个控制器,应该使用类和装饰器,装饰器会使类相关联的数据的关联起来,将请求绑定到相应的控制器。可以使用Nest-cli提供的......
  • odoo中怎么为菜单配置权限组
      上面的需求是:为 ”设计识图“ 这个菜单添加权限:只有在设置>用户和公司>用户组中,会有一个名为“辅助组-设计识图”打钩后,才会显示这个菜单项: 实现上面的需求共三步:  1、在本模块的security目录下的\security\ir.model.access.csv下为模型添加权限(如果......
  • 【RocketMQ】RocketMQ 5.0新特性(三)- Controller模式
    在RocketMQ5.0以前,有两种集群部署模式,分别为主从模式(Master-Slave模式)和Dledger模式。主从模式主从模式中分为Master和Slave两个角色,集群中可以有多个Master节点,一个Master节点可以有多个Slave节点。Master节点负责接收生产者发送的写入请求,将消息写入CommitLog文件,Slave节点会......
  • 安装odoo13出现relation "ir_module_module" does not exist
    全新安装的odoo,但启动时出现relation"ir_module_module"doesnotexist,以为是数据库要手动初始化,所以也在启动时加入-ibase-dodoo13的命令,但也无效,注释addons_path就ok,但路径检查过是没有问题的,待启动之后,再打开addons_path就行了,应该和addons_path里面有些插件有错误导致......
  • FDFullscreenPopGesture使用setViewControllers跳转一个隐藏导航栏新页面失效问题
    解决办法:1.对setViewControllers:animated:进行方法交换SELoriginalSelector1=@selector(setViewControllers:animated:);      SELswizzledSelector1=@selector(fd_setViewControllers:animated:);      MethodoriginalMethod1=class_getIn......