odoo16-API(Controller)带有验证访问的接口
目前我使用odoo原生的登录token来验证登陆的有效性
废话不多说直接上代码
# 测试获取session_id
import requests
class GetOdooData(http.Controller):
def getOdooToken(self):
# http://localhost:8123访问odoo的路径,后面的web/session/authenticate固定写法请不要动!!!
url = "http://localhost:8069/web/session/authenticate"
# 传入需要访问的数据库名称,登录账号与密码
data = {
"params": {
"db": "devodoo16.0",
"login": "odoo",
"password": "odoo",
}
}
headers = {'Content-type': 'application/json'}
response = requests.post(url, headers=headers, json=data)
# 从服务器返回的响应信息中获取名为"session_id"的cookie的值,并将其返回。
return response.cookies["session_id"]
@http.route('/test', type='json', auth="none", cors="*", csrf=False)
def test(self, **kw):
odootoken = self.getOdooToken()
return odootoken
# 用此代码进行接口测试,查看前端是否拿到了session_id
修改接口验证auth=user 的
代码如下
@http.route('/getdata', type='json', auth="user", cors="*", csrf=False)
def getdata(self, **kw):
# dingdan_h = 4900145711
dingdan_h = kw.get('dingdan_h')
print("dingdan_h==",dingdan_h)
dingdan = request.env['dc.kaishik.dd'].sudo().search([('dingdan_h', '=', dingdan_h)])#随便找个模型查询一条数据
if not dingdan:
back_data = {'code': 300, 'msg': '订单不存在'}
return (back_data)
data = {
"dingdan_h": dingdan.dingdan_h,
"dingdan_lx": dingdan.dingdan_lx,
"jiaohuo_date": dingdan.jiaohuo_date,
}
back_data = {'code': 100, 'msg': '查询订单成功', 'data': data}
print("back_data==",back_data)
return (back_data)
重启刷新,访问getdata接口,并且在前端的(Headers)头部写入key:X-Openerp-Session-Id;value填入刚刚拿到的cookie
就可以拿到数据
如果在前端的(Headers)头部 不填写 key:X-Openerp-Session-Id 那么返回就为如下
以上 溜了 ~~~ Bye ~