一、controller介绍:Controller层在odoo里面可以认为是控制器,根据url地址来控制后端的业务和前端的内容展示,我们一般偏向于叫路由控制,

它相当于内网和外网之间的防火墙,外网的请求到达控制器后,由控制器解析请求的url,再来匹配合适的内网业务方法。

二、auth:定义请求的权限,其值有'user','public','none'三种,

1、如果路由权限为user,则需要验证了登录用户信息后才可以访问;

2、如果路由权限为public,用户如果没有通过身份验证,当前请求将使用共享的Public用户访问;

3、如果路由权限为none,则表示开放访问,没有权限验证,使用这种方式要特殊注意,

             有可能你访问odoo的时候还没有确定数据库连接资源

最简单的例子:像这两种例子系统不会验证,直接请求路由就能进到接口里面去,这里不再赘述

from odoo import http

class Academy(http.Controller):

    @http.route('/academy/academy', auth='public',type='http')
def index(self, **kw):
"""这里认证是public"""
return "Hello, world" @http.route('/academy/academy/objects', auth='none',type='json')
def list(self, **kw):
        """这里没有认证"""
        return http.request.render('academy.listing', {
'root': '/academy/academy',
'objects': http.request.env['academy.academy'].search([]),
})


三、功能点介绍:
 auth="user"的路由接口用法

则需要验证了登录用户信息后才可以访问

    @http.route(['/data_test'], type='http', auth="user", csrf=False, website=True, sitemap=True, cors="*")
def data_iot(self, **kw):
"""
auth="user" 用户验证在请求头中加入
headers = {'X-Openerp-Session-Id': session_id}
:param kw:
:return:
"""return 'True'

案例:

1、假如请求头中不加入  headers = {'X-Openerp-Session-Id': session_id},系统会返回一个登录界面,

2、加入headers = {'X-Openerp-Session-Id': session_id}后接口返回的值为 True

总结:所以使用auth="user"认证,一定需要用户登录后才可以执行路由里面的逻辑

注意点:这里的session_id怎么获取,这里写了一个函数,调用原生登录的函数获取session

    @http.route('/melon/web/authenticate', type='json', auth='none', methods=["POST"], csrf=False)
def melon_web_authenticate(self, *args, **post):
"""
请求参数格式:
{
"jsonrpc": "2.0",
"params": {
"login": "admin",
"password": "admin",
"db": "odoo15001"
}
}
在调用其他 auth="user"的路由接口时,在请求头中添加:
X-Openerp-Session-Id即可 """
data = request.jsonrequest
data = data.get('params')
try:
login = data["login"]
except KeyError:
raise exceptions.AccessDenied(message='`login` is required.')
try:
password = data["password"]
except KeyError:
raise exceptions.AccessDenied(message='`password` is required.')
try:
db = data["db"]
except KeyError:
raise exceptions.AccessDenied(message='`db` is required.')
url_root = request.httprequest.url_root
AUTH_URL = "%sweb/session/authenticate/" % url_root
headers = {'Content-type': 'application/json'}
data = {
"jsonrpc": "2.0",
"params": {
"login": login,
"password": password,
"db": db
}
}
res = requests.post(
AUTH_URL,
data=json.dumps(data),
headers=headers
)
print(res.content)
try:
session_id = res.cookies["session_id"]
user = json.loads(res.text)
user["result"]["session_id"] = session_id
except Exception:
return "Invalid credentials."
return user["result"]

postman返回的参数是:

{
"jsonrpc": "2.0",
"id": null,
"result": {
"uid": 2,
"is_system": true,
"is_admin": true,
"user_context": {
"lang": "zh_CN",
"tz": "Europe/Brussels",
"uid": 2
},
"db": "odoo15001",
"server_version": "15.0",
"server_version_info": [
15,
0,
0,
"final",
0,
""
],
"support_url": "https://www.odoo.com/buy",
"name": "Mitchell Admin",
"username": "admin",
"partner_display_name": "YourCompany, Mitchell Admin",
"company_id": 1,
"partner_id": 3,
"web.base.url": "http://127.0.0.1:8080",
"active_ids_limit": 20000,
"profile_session": null,
"profile_collectors": null,
"profile_params": null,
"max_file_upload_size": 134217728,
"home_action_id": false,
"cache_hashes": {
"translations": "5ad06e487c185f5f4a80c72120c954fa70a279a8",
"load_menus": "db05f3845859cfac0bc400bd13512ceacf41cd75e2478019bc1db62a266ef1cc",
"qweb": "b3981763272f1f1b9af47113922db3b93606d3681ae38162b15d73250e66e92c",
"assets_discuss_public": "e63e0ca54f65545b732a321ae202434cd70a902b81666851d74d86082bd48e1c"
},
"currencies": {},
"user_companies": {
"current_company": 1,
"allowed_companies": {
"1": {
"id": 1,
"name": "YourCompany",
"sequence": 0
}
}
},
"show_effect": "True",
"display_switch_company_menu": false,
"user_id": [
2
],
"web_tours": [],
"tour_disable": true,
"notification_type": "email",
"session_id": "333fb09a92b5f0ad333ffae2059cea44091ad7e0"
}
}

最后将session_id放到 上面接口即可

ODOO路由里面的auth="user" 的使用的更多相关文章

  1. vue 路由里面的 hash 和 history

    对于 Vue 这类渐进式前端开发框架,为了构建 SPA(单页面应用),需要引入前端路由系统,这也就是 Vue-Router 存在的意义.前端路由的核心,就在于 —— 改变视图的同时不会向后端发出请求. ...

  2. procps包里面的sysctl命令

    procps包里面的sysctl命令 --http://www.cnblogs.com/createyuan/p/3740917.html?utm_source=tuicool&utm_med ...

  3. 讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute

    先贴文章链接 正文 ASP.NET Core MVC 2.1 特意为构建 HTTP API 提供了一些小特性,今天主角就是 ApiControllerAttribute. (注:文章是18年2月份的, ...

  4. 讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute (转载)

    ASP.NET Core MVC 2.1 特意为构建 HTTP API 提供了一些小特性,今天主角就是 ApiControllerAttribute. (注:文章是18年2月份的,所以文章提到了cor ...

  5. openstack里面的Provider network 和 Tenant network 的区别

    openstack里面的Provider network 和 Tenant network 的区别 openstack里面的网络相对复杂.经常有人对几个网络概念搞混淆,这里基本说明下 Openstac ...

  6. Activity往另外一个Activity传值,Fragment获取另外一个Activity里面的值。

    在oneActivity中实现跳转到MainActivity //intent 用来跳转另外一个MainActivity,bundle传值到MainActivity         Intent Ma ...

  7. Java基本概念(2)J2EE里面的2是什么意思

    J2EE里面的2是什么意思 J2SE,J2SE,J2ME中2的含义要追溯要1998年.1998年Java 1.2版本发布,1999年发布Java 1.2的标准版,企业版,微型版三个版本,为了区分这三个 ...

  8. 在wex5平台grid里面的gridselect下拉不能显示汉字问题

    当grid里面有gridSelect组件的时候,gridSelect里面的bind-ref是对应的数据库存入字段(int类型),bind-labelRef是对应的计算字段(视图里面的),而option ...

  9. dede文章调用时过滤调 body里面的style属性和值

    dede 发布文章的时候会在里面的标签中添加一些style 属性,现在改网站想去掉这些属性和里面的值,因为文章太多所以就用下面的方法 \include\arc.listview.class.php 在 ...

  10. 提取数据库字段里面的值,并改变+图片懒加载,jquery延迟加载

    要求:手机端打开某个页面的详细信息,因为网速或者别的原因,响应太慢,因为图片大的原因,希望先进来,图片在网页运行的情况再慢慢加载(jquer延迟加载) http://www.w3cways.com/1 ...

随机推荐

  1. 【论文随笔】基于会话的推荐系统构建方法调查(Survey On Methods For Building Session-Based Recommender Systems)

    前言 今天读的论文为一篇于2023年发表在国际开放信息技术杂志(International Journal of Open Information Technologies)的论文,文章是关于构建基于 ...

  2. ocr识别过程中报错 tesseract is not installed

    这个问题无论在初始编译时或者在后来坏境变更调试时都会遇到的问题. 解决:问题原因是源码中的默认路径位置与文件位置不同,需要更改一下

  3. go gin web服务器使用fvbock/endless优雅地重启或停止

    gin使用fvbock/endless gin 正常使用注册路由时: package main import "github.com/gin-gonic/gin" func mai ...

  4. python pandas csv 大文件 DataFrame转换为List

    python 将大文件读取为 DataFrame 时,直接对整个文件进行读取会比较耗时,甚至内存还会不足. https://pandas.pydata.org/pandas-docs/stable/u ...

  5. mac php.ini在哪

    解答 mac 默认没有 php.ini 文件,但是有对应的模版文件 php.ini.default,位于/etc/php.ini.default,可以拷贝一份进行修改. cd /etc sudo cp ...

  6. Camel多智能体框架初探

    Camel介绍 CAMEL 是一个开源社区,致力于探索代理的扩展规律.我们相信,在大规模研究这些代理可以提供对其行为.能力和潜在风险的宝贵见解.为了促进该领域的研究,我们实现了并支持各种类型的代理.任 ...

  7. Portainer安装配置

    什么是portainer 官网:https://www.portainer.io/ Portainer(基于 Go) 是一个轻量级的Web管理界面,可让您轻松管理 Docker 主机 或 Swarm ...

  8. [每日算法 - 华为机试] 剑指 Offer 57 - II. 和为s的连续正数序列 「滑动窗口」

    入口 力扣https://leetcode.cn/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/ 题目描述 输入一个正整数 target ,输出所 ...

  9. ESP32+Arduino入门(三):连接WIFI获取当前时间

    ESP32内置了WIFI模块连接WIFI非常简单方便. 代码如下: #include <WiFi.h> const char* ssid = "WIFI名称"; con ...

  10. Ruby+Appium+testunit实现app自动化demo

    1.安装对应库 gem install test-unit gem install appium_lib 2.编写代码 代码如下: require 'appium_lib' require 'test ...