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 = 4900145711dingdan_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 ~