(10)odoo控制器操作

-----------------
更新时间
17:44 2016-02-17 星期三
-----------------
* 一个简单的控制器
   class Mymodule(http.Controller)
       @http.route('mymodule/mymodule/', auth='public')
       def index(self,**kw)
           return "Hello, world"
           #return http.request.render("mymodule.index",{'fruits':['apple','banana','pear']})
           使用模板  
   对应的模板文件
    <openerp>
        <data>
           <template id="index">
                <title>mymodule</title>
                <t t-foreach="fruits" t-as="fruit">
                    <p><t t-esc="fruit"></p>
                </t>
           </template>
        </data>
    </openerp>  
* 路由 (URL Patterns)
    # 带参数  
    @http.route('hello/<name>')
    def hello(self,name, **kw){
       return "Hello,{}".format(name)  
    }
    #指定参数是整数
    @http.route('hello/<int:identifier>')
    def hello(self,identifier, **kw){
       return "Hello,{}".format(identifier)  
    }
    #指定参数是长度为5的字符串
    @http.route('hello/<string(length=5):lang>')
    def hello(self,lang, **kw){
       return "Hello,{}".format(lang)  
    }
    #指定参数是指定字符串数组之一
    @http.route('hello/<any(bird,reptil,mammal):group>/<int:id>/')
    def hello(self,group,,id, **kw){
       return "Hello,{}".format(group,id)  
    }
        * string(minlength=1,maxlength=None,length=None)
        * path
        * any(*items)
        * int([fixed_digits][,min][,max])
        * float([min],[,max])
        * uuid(Werkzeug0.10)
        * model(model_name)
    #多重路径匹配
    @http.route(['/hello/','/hello/<int:value>'])
    def hello(self,value, **kw){
       return "Hello,{}".format(value)  
    }   
    #网站支持
    @http.route('/hello/', website=True)
    def hello(self, **kw):
        return http.request.render('module.hello')
    --------
    http.request.website
    http.request.lang  得到语言
    http.request.redirect(url) 跳转
* 验证
    #公用,不要验证可以访问
     @http.route('/hello/','public')
      def hello(self, **kw){
       # code  
    }

    #要登录才能访问,否则跳到登录页面
     @http.route('/hello/','user')
      def hello(self, **kw){
       # code  
    }
    #request.uid=none
     @http.route('/hello/','none')
      def hello(self, **kw){
       # code  
     }
    # 采用 GET 模式访问
     @http.route('/hello/', methods=['GET'])
      def hello(self, **kw){
       # code  
     }
     # 采用 POST 模式访问
     @http.route('/hello/', methods=['POST'])
      def hello(self, **kw){
       # code  
     }
* 请求
    class openerp.http.WebRequest(httprequest)
    封装的属性
        httprequest: werkzeug.wrappers.Request 原始的request
        params:映射的参数
        env: 当前环境
        context:上下文
        session: 会话
        cr: 数据库操作句柄
        debug:当前是否调试模式
        db:当前连接的数据库
    class openerp.http.HttpRequest(*args)
            make_response(data, headers=None, cookies=None)
            not_found(description=None) 404页面的响应
            render(template, qcontext=None, lazy=True, **kw) 带上模板渲染
    class openerp.http.JsonRequest(*args)
    返回json  
* 响应
    class openerp.http.Response(*args, **kw)
        *args 为
            template (basestring) -- 指定的模板名
            qcontext (dict) -- 渲染的上下文
            uid (int) -- 渲染到模板上的用户id
    可用的方法
        render() 渲染指定模板
        flatten() 强制渲染,没有采用模板
* 控制器
    class openerp.http.Controller
    class MyController(openerp.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()

作者:陈伟明 | 联系 : QQ 942923305 | 微信 toby942923305 | E-mail: toby2chen@hotmail.com

转载于:https://my.oschina.net/toby2chen/blog/611322

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值