使用步骤
1) 导包
from odoo import http
或from odoo.http import request
2)类创建
class Yp32011(http.Controller):
....
3) 函数定义
GET
- 返回字符串
@http.route('/index', auth='public', methods=["GET"],csrf=False, cors='*') def index(self): return "Hello, world"
- 返回json
- 不带参数
用SQL写法等同于@http.route('/projects', auth='public', methods=["GET"],csrf=False, cors='*') def projects(self): project_obj = http.request.env["yp32011.inspection_project"].sudo().search([]) result = [{ "id": record.id, "name": record.name, } for record in project_obj] return json.dumps(result)
@http.route('/projects', auth='public', methods=["GET"],csrf=False, cors='*') def projects_SQL(self): http.request.env.cr.execute("select * from yp32011_inspection_project") result = http.request.env.cr.fetchall() result = [{ "id": record[0], "name": record[1], } for record in result] return json.dumps(result)
- 带参数
1)通过设置关键字参数获取
2)通过设置不定长参数kwargs获取@http.route('/projects/<int:project_id>', auth='public', methods=["GET"],csrf=False, cors='*') def projects(self,project_id=None): project_obj = http.request.env["yp32011.inspection_project"].sudo().search([('id','=',project_id)]) ...
@http.route('/projects/<int:project_id>', auth='public', methods=["GET"],csrf=False, cors='*') def projects(self,**kwargs): # kwargs是个字典 project_id=kwargs.get('project_id') # 或 kwargs['project_id'] project_obj = http.request.env["yp32011.inspection_project"].sudo().search([('id','=',project_id)]) ...
- 不带参数
POST
apipost传递的参数
{
"params": {
"data": {
"name": "test2",
"inspected_procedure":[1],
}
}
}
1) 通过http.request.jsonrequest获取参数
@http.route('/project', auth='public', methods=["POST"], type="json",csrf=False, cors='*')
def create_project(self):
param = http.request.jsonrequest['params']
# param是个字典
vals={
'name':param['data']['name'],
'inspected_procedure':param['data']['inspected_procedure']
}
print(vals)
http.request.env["yp32011.inspection_project"].sudo().create(vals)
result={
"code":200,
"message":"ok",
"data":"新建项目成功"
}
return json.dumps(result,ensure_ascii=False)
2) 通过设置不定长参数kwargs获取
@http.route('/project', auth='public', methods=["POST"], type="json",csrf=False, cors='*')
def create_project(self,**kwargs):
vals={
'name':kwargs['data']['name'], # 或 kwargs.get('data').get('name')
'inspected_procedure':kwargs['data']['inspected_procedure']
}
......
PUT
1)通过设置关键字参数获取获取需修改的记录ID
2)通过http.request.jsonrequest获取需修改的参数内容
@http.route('/projects/<string:pk>', methods=["PUT"], type="json", auth='public', csrf=False, cors='*')
def update_project(self, pk=None):
param = http.request.jsonrequest
project_obj = http.request.env["yp32011.inspection_project"].sudo().search([("id", "=", pk)])
if not project_obj:
return json.dumps("not exists")
project_obj.name = param['params']['data']["name"]
result = [{
"id": record.id,
"name": record.name,
}
for record in project_obj]
return json.dumps(result)
DELETE
通过设置关键字参数获取获取需删除的记录ID
@http.route('/projects/<string:pk>', methods=["DELETE"],auth='public', csrf=False, cors='*')
def delete_project(self, pk=None):
project_obj = http.request.env["yp32011.inspection_project"].sudo().search([("id", "=", pk)])
if not project_obj:
return json.dumps("not exists")
project_obj.unlink()
result={
"code":200,
"message":"ok",
"data":"删除项目成功"
}
return json.dumps(result,ensure_ascii=False)
用法汇总
- 查看search(domian)
result = http.request.env['bim5d.quality_standard'].search( [ ('project_budget','=',project_id), ('state','=','done') ])
- 查找总数:search_count(domian)
result = http.request.env["bim5d.quality_record"].sudo().search_count([])
- 使用SQL:cr.execute(“sql语句”,param)
http.request.env.cr.execute("select count(*) from (select DISTINCT header,feedback from bim5d_problem_record) t") result = http.request.env.cr.fetchone()
- 返回xml模版页面
return request.render("模块名.template_id", values)
- 返回json数据集
return json.dumps(values)
注:domain是一种表达式,通常用来筛选数据记录。
常用函数方法
-
create(dics):在数据表中插入一条记录,返回新对象。
-
search(domain):查询符合条件的对象列表,返回对象列表。
-
search(domain, limit=1):查询符合条件的一个对象,返回一个对象。
-
search_read(domain, fields):查询符合条件的字典列表。返回指定fields的字典列表。
-
browse(id):浏览对象及其关联对象。返回对象。
-
browse([ids]):浏览对象列表,返回对象列表
-
browse(id).read(fields):浏览对象及其关联对象,返回字典
-
search(domain).read(fields):返回记录集的指定字段值列表。返回字典列表
-
write(dics):保存一个或几个记录的一个或几个字段。返回布尔值,True
-
unlink:删除一个或几个记录
-
default_get:复位一个或多个字段的缺省值
-
default_set:重置字段的缺省值