一、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. 【论文随笔】会话推荐系统综述(A Survey on Conversational Recommender Systems)

    前言 今天读的论文为一篇于2021年5月发表在<ACM计算机调查>(ACM Computing Surveys)的论文,文章提供了对话式推荐系统(CRS)的全面综述,探讨了CRS的定义.概 ...

  2. Selenium KPI接口 iframe切换

    应用场景: 在编写脚本的时候,经常会发现最熟悉的错误"元素定位不到",此时如果你查看页面元素,有可能你会发现元素在>标签对之间. 此时,我们只有先将代码驱动切换到frame内 ...

  3. # 如何引进高级的 IT 自动化项目:一个 3 步走计划

    如果您的团队与大多数 IT 组织一样,您的团队正在执行某种形式的自动化(包括开发和运营),即使只是运行简单的脚本来完成基本任务. 事实上,开始自动化之旅的最佳地点是执行普通的.低技能的任务,例如密码重 ...

  4. linux npm 全局安装 command not found

    前言 在 linux 使用 npm 全局安装一个模块时,会提示命令找不到. 例如:npm install @quasar/cli -g 后 $ quasar -v quasar: command no ...

  5. mac地址查询

    打开命令提示符窗口(cmd程序) 快捷键 win+r 打开运行窗口,输入 cmd 命令打开 命令提示符窗口 或者点击开始菜单,在搜索程序和文件输入框,输入 cmd(会找到进入dos命令的cmd程序) ...

  6. 入门Dify平台:如何根据需求选择与创建最合适的应用

    今天我们将继续深入讲解Dify,重点介绍如何创建应用.具体来说,我们将探讨如何根据不同的需求来决定选择什么类型的应用最为合适,帮助大家更好地理解在Dify平台上构建应用的最佳实践. 创建空白应用 首先 ...

  7. AOT编译Avalonia应用:StarBlog Publisher项目实践与挑战

    前言 最近我使用 Avalonia 开发了一个文章发布工具,StarBlog Publisher. Avalonia 是一个跨平台的 UI 框架,它可以在 Windows.Linux 和 macOS ...

  8. 用户代码未处理 SqlException

    场景重现 客户端连接 Sql Server 2008 R2 数据库出现如下错误: 错误原因 后发现是数据库服务是手动启动的,服务器更新重启后,SQL Server服务没自动启动... 解决办法 把SQ ...

  9. win11开启hyper-v安装windows虚拟机

    序言: 这周要居家办公了, 趁周末赶紧配置办公环境,因为公司注重安全保密,所以要用对应安全软件,我就干脆整台虚拟机来运行这些东西吧. 开启hyper-v服务 好像是由于电脑装的是windows家庭版, ...

  10. Assets, Resources and AssetBundles(五):AssetBundle usage patterns

    这是系列文章中的第五章,内容涉及"Unity5"中的资产.资源和资源管理. 本系列的前一章介绍了AssetBundles的基本原理,其中包括各种加载API的低级行为.本章讨论了在实 ...