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()
     
     
  • 相关阅读:
    Where条件的in里面放太多数据导致很慢
    获取项目文件目录下的所有文件路径
    如何将数据转换成XML格式
    微信6.2开发笔记
    sql server 2008导出数据注意事项
    IIS7.5下404错误设置失效的问题
    采用ASP.NET IIS 注册工具 (Aspnet_regiis.exe)对web.config实行本地加密
    webkit自定义滚动条
    ueditor1_4_3-utf8-net使用笔记
    WebDev.WebServer40.exe已停止工作
  • 原文地址:https://www.cnblogs.com/ygj0930/p/11189332.html
Copyright © 2011-2022 走看看