-----------------
更新时间
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