zoukankan      html  css  js  c++  java
  • odoo10学习笔记十二:web controller

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189332.html 

    一:路由

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

    复制代码
    复制代码
    route -- 字符串或数组,决定哪个http请求匹配所装饰的方法,可以是单个字符串、或多个字符串的数组
    type -- 请求的类型,可以是http或json
    auth -- 认证方法的类型,可以是以下几种:
        user - 必须是认证的用户,该请求基于已认证的用户
        public - 当不通过认证访问时使用公用的认证
        none - 相应的方法总是可用,一般用于框架和认证模块,对应请求没有办法访问数据库或指向数据库的设置
    methods 这个请求所应用的一系列http方法,如果没指定则是所有方法
    cors 跨域资源cors参数
    csrf(boolean) 是否开启CSRF保护,默认True
    1.如果表单是用python代码生成的,可通过request.csrf_token() 获取csrf
    2.如果表单是用javascript生成的,CSRF token会自动被添加到QWEB环境变量中,通过require('web.core').csrf_token使用
    3.如果终端可从其他地方以api或webhook形式调用,需要将对应的csrf禁用,此时最好用其他方式进行验证
    复制代码
    复制代码

    二:请求

    请求对象在收到请求时自动设置到odoo.http.request。

    class odoo.http.WebRequest(httprequest)

    所有odoo WEB请求的父类,一般用于进行请求对象的初始化:

    复制代码
    复制代码
    httprequest 原始的werkzeug.wrappers.Request对象
    params 请求参数的映射
    cr 当前方法调用的初始游标,当使用none的认证方式时读取游标会报错
    context 当前请求的上下文键值映射
    env 绑定到当前请求的环境
    session 储存当前请求session数据的OpenERPSession
    debug 指定当前请求是否是debug模式
    db 当前请求所关联的数据库,当使用none认证时为None
    csrf_token(time_limit=3600) 为该请求生成并返回一个token(参数以秒计算,默认1小时,如果传None表示与当前用户session时间相同)
    复制代码
    复制代码

    class odoo.http.HttpRequest(*args)

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

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

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

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

    参数:
    data (basestring) -- 响应主体
    headers ([(name, value)]) -- http响应头
    cookies (collections.Mapping) -- 发送给客户端的cookie

    not_found(description=None)

    给出404 NOT FOUND响应

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

    渲染qweb模板,在调度完成后会对给定的模板进行渲染:

    参数:
    template (basestring) -- 用于渲染的模板
    qcontext (dict) -- 用于渲染的上下文环境
    lazy (bool) -- 渲染动作是否应该拖延到最后执行
    kw -- 转发到werkzeug响应对象

    class odoo.http.JsonRequest(*args)

    处理通过http发来的json rpc格式请求:

    说明:
    1.method -- 忽略
    2.params -- 须是一个json格式对象
    3.处理方法返回的结果是一个json-rpc格式的,以JSON-RPC Response对象的形式组装

    三:响应

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

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

    template (basestring) -- 用于渲染的模板
    qcontext (dict) -- 用在渲染中的上下文环境
    uid (int) -- 用于调用ir.ui.view渲染的用户id,None时使用当前请求的id

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

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

    四:控制器

    一般通过继承的形式创建:class odoo.http.Controller

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

    class MyController(odoo.http.Controller)://继承controller定义控制器
        @route('/some_url', auth='public')//装饰器路由访问方法,并指明访问方式:公开还是需要用户登陆
        def handler(self):
            return stuff()
     
     
  • 相关阅读:
    Atitit  atiMail atiDns新特性 v2  q39
    Atitit  atiMail atiDns新特性 v2  q39
    Atitit.aticmd v4  新特性q39 添加定时器释放功能
    Atitit.aticmd v4  新特性q39 添加定时器释放功能
    Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39
    Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39
    Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
    Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
    atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException  v2 q31
    知也atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException  v2 q31无涯 - I
  • 原文地址:https://www.cnblogs.com/ygj0930/p/11189332.html
Copyright © 2011-2022 走看看