关于 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
2020-03-30 :
微信模块 Oejia_wx v0.6.2 发布,统一SDK,缓存对象配置模型等多项优化
2018-11-14 :
基于企业微信的多功能微信客服系统,多终端回复,无需专人值守电脑
2018-11-13 :
微信模块 Oejia_wx v0.5.5 发布,优化菜单配置及会话管理增加素材支持
2018-09-13 :
Odoo 小程序商城模块
2018-02-08 :
Odoo 列表视图如何开启横向自动滚动条
2016-01-19 :
Odoo 数据的增/删/改/查(CRUD)操作 API 解析及示例
2016-01-17 :
关于Django框架的ContentType模型
2014-12-02 :
系统修复和更新记录
2014-12-01 :
begin
2014-12-01 :
Mole概述(基于Bottle的超轻量级web基础架子)
官方公众号
关注公众号实时咨询我们
分类
Odoo (87)
DjangoX (11)
后端HTTP (7)
YouMd (4)
移动开发 (4)
Django (4)
公告说明 (2)
JS (2)
Python (1)
前端 (1)
Nginx (1)
桌面UI (1)
March 2021
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
About This Entry
Odoo 微信模块 Oejia_wx 基本使用说明
Odoo 中的内置特殊模型
About This Blog
main index
to find recently
archives
to find all
标签
微信模块
小程序商城
Python
Web
Http
Cordova
客服系统
微信客服系统
HTML5
微信客服
Markdown
解析
DjangoX
微信模块发布记录
客服工单系统
ExtJS
示例
Excel
JS
新年
PyQT
扩展开发
YouPBX
服系统
最近发布
Odoo 支付宝模块使用说明
Odoo 字段定义详解
Linux 软件源推荐
如何实现 Odoo 数据每天备份到Amazon S3存储
Odoo 如何用命令行备份还原数据
如何实现 Odoo 数据每天备份到本地存储
微信模块 Oejia_wx v0.6.3 发布,多项兼容优化,即将全面适配 Odoo14
Odoo 小程序商城模块 Oejia_weshop v0.2.2 发布,全面支持多公司销售机制
OE商城积分模块
Odoo14 相对 Odoo13 依赖库的变化
Friend Links
Oejia技术梦博客分享
YouMd,爱上MarkDown
Mole轻量级wsgi架子