关于 Odoo 的 dbfilter 配置项 - Oejia 技术栈,企业方案分享、Odoo顾问
Oejia 技术栈
主页
分享
微信模块
索引
关于
订阅
编辑器
登录
关于 Odoo 的 dbfilter 配置项
Oejia
on 2016-03-14 17:31:46
## 概述 默认情况下首次访问odoo页面时,会要求选择要访问的数据库,db中的所有库都会被列出来供选择,这种在生产环境下通常是不希望的看到,如果在启动时指定连接的数据库名可以解决这个问题 1. .conf文件中指定 `db_name = xxx ` 2. 或者启动命令加参数` -d xxx ` 指定连接的数据库后Odoo启动即会load加载该库,否则只有首次请求时触发加载指向的db ## dbfilter 当我们需要根据域名来匹配数据库时(比如saas环境)这样就不适用了,这个时候就可以用 dbfilter 这个配置项来实现 dbfilter 默认值为 `.*` eg: `dbfilter = ^%h$` 表示按域名精确匹配数据库服务器中名称为域名的数据库 启动参数 `--db-filter='^%d$'` 表示按二级域名前缀精确匹配对应名称的数据库(注意:127.0.0.1访问时会被匹配为 127 库名) 可用的匹配替代符号有 %h 和 %d ### ^%h$ %h 代表访问访问的域名,比如访问 www.abc.com 时对应数据库 www.abc.com ### ^%d$ 当访问地址为 www.abc.com 时 %d 为 abc 对应数据库 abc 当访问地址为 abc.com 时 %d 为 abc 对应数据库 abc 当访问地址为 shop.abc.com 时 %d 为 shop 对应数据库 shop ## 相关源代码 odoo中的相应的解析代码 ```python def db_filter(dbs, httprequest=None): httprequest = httprequest or request.httprequest h = httprequest.environ.get('HTTP_HOST', '').split(':')[0] d, _, r = h.partition('.') if d == "www" and r: d = r.partition('.')[0] r = openerp.tools.config['dbfilter'].replace('%h', h).replace('%d', d) dbs = [i for i in dbs if re.match(r, i)] return dbs ``` ## 扩展 笔者由于在saas环境的需求扩展了两个配置参数用于控制访问的路由以及域名绑定 - dbhost = xxx.com dbhost 用于控制针对哪个域名做二级域名的路由 - dbmap = dbmap.json dbmap 指定的json文件中指明了具体映射路由表及域名绑定关系 dbmap.json 配置方法 {"二级子域名": ["绑定的外部域名", "数据库名"], ...} 示例: ``` { "test": ["www.test.com", "test.odoo.com"], "odoo": ["","odoo-server"] //访问域名:www.odoo.com "abc": ["","abc-server"] //访问域名:abc.odoo.com } ``` 如果不想列出所有 db 则在 .conf 中添加 `dbfilter = ^%h$` 实现的关键代码如下: ```python def db_filter(dbs, httprequest=None): httprequest = httprequest or request.httprequest h = httprequest.environ.get('HTTP_HOST', '').split(':')[0] d, _, r = h.partition('.') rg = '^$' m_config = openerp.tools.config if r in m_config['dbhost']: if d == "www" and r: d = r.partition('.')[0] rg = m_config['dbfilter'].replace('%h', h).replace('%d', d) if d in m_config['ukey_dbname']: rg = '^%s$'%m_config['ukey_dbname'][d] else: if h in m_config['host_ukey']: ukey = m_config['host_ukey'][h] if ukey in m_config['ukey_dbname']: rg = '^%s$'%m_config['ukey_dbname'][ukey] else: rg = '^%s$'%ukey else: rg = '^$' dbs = [i for i in dbs if re.match(rg, i)] return dbs ```
Information
关于 Odoo 的 dbfilter 配置项
http://www.oejia.net/blog/2016/03/14/odoo_dbfilter.html
http://www.oejia.net/raw/2016/03/14/odoo_dbfilter.md
Oejia
on 2016-03-14 17:31:46
Category
Odoo
Related
2022-05-24 :
Odoo 销售订单关于内部执行与协作的扩展功能介绍
2021-05-22 :
Odoo 微信模块常见问题处理
2020-05-06 :
OE小程序商城订阅消息通知使用说明
2020-01-06 :
Odoo客服系统之小程序客服消息使用说明
2019-03-30 :
Odoo 扫码及授权免密登录通用模块使用说明
2019-02-26 :
Odoo 微信客服扩展模块使用说明
2018-11-14 :
Odoo 基于企业微信的多功能微信客服系统,多终端回复,无需专人值守电脑
2018-06-13 :
微信模块 Oejia_wx v0.5.2 发布,优化配置且增加直发微信消息UI功能
2017-08-10 :
DjangoX 首页面板的使用
2014-12-22 :
MoCrud详细说明文档
March 2023
Sun
Mon
Tue
Wed
Thu
Fri
Sat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
分类
Odoo (123)
DjangoX (13)
后端HTTP (7)
YouMd (4)
移动开发 (4)
Django (3)
前端 (2)
JS (2)
公告说明 (2)
Python (1)
Nginx (1)
桌面UI (1)
异常处理 (1)
官方公众号
关注公众号实时咨询我们
About This Entry
Odoo 微信模块 Oejia_wx 基本使用说明
Odoo 中的内置特殊模型
About This Blog
main index
to find recently
archives
to find all
标签
微信模块发布记录
微信模块
小程序商城
Python
Web
Http
客服系统
OE商城
Cordova
审批OA
HTML5
Markdown
解析
DjangoX
ExtJS
示例
Excel
JS
新年
PyQT
扩展开发
YouPBX
服系统
最近发布
Odoo生产环境需要注意或修改的一些关键配置项
Odoo 更灵活的对账、付款及客户余额的介绍
Odoo16 SyntaxError: Failed to execute 'querySelectorAll' on 'Element': 'footer:not(field footer)' is not a valid selector
企业微信错误码:60020 的处理
在 Odoo 中使用 WebSocket 并兼容Odoo的Session会话识别
Odoo 让 server action 显示到指定的视图上
Odoo 增加树形列表视图的支持
Odoo 16 正式发布时间
Odoo 企业微信之日历、日程的同步
钉钉消息通知及审批功能的使用说明
Friend Links
Oejia技术梦博客分享
YouMd,爱上MarkDown
Mole轻量级wsgi架子