Oejia 技术栈
首页
应用市场
方案
OE学院
分享
关于
编辑器
登录
关于 Odoo 的 dbfilter 配置项
on 2016-03-14
## 概述 默认情况下首次访问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/article/723ac2b847d75758912bc7b9eef5a804
http://www.oejia.net/raw/723ac2b847d75758912bc7b9eef5a804
on 2016-03-14
Category
Odoo
Related
2018-01-23 :
Odoo 视图XML常用属性项说明
2019-01-29 :
Odoo 前端扩展之—增加 html 型字段 widget,用于列表视图显示html内容
2016-04-22 :
Odoo 配置项全解
2021-09-01 :
Odoo 通用图形验证码模块
2016-03-21 :
YouMd 的 config.py 各配置项说明
2021-08-31 :
Odoo 商城模块 Oejia_weshop v0.2.4 发布,可融合POS构建线上线下一体化会员系统
2017-08-10 :
DjangoX 首页面板的使用
2016-02-01 :
odoo相关
2019-03-30 :
Odoo 扫码及授权免密登录通用模块使用说明
2018-05-04 :
基于 Odoo 微信模块实现的微信客服系统
官方订阅号
关注订阅实时了解我们更多分享
分类
(20)
Django (3)
DjangoX (13)
JS (2)
Nginx (1)
Odoo (135)
Python (1)
YouMd (3)
公告说明 (2)
前端 (2)
后端HTTP (7)
异常处理 (1)
桌面UI (1)
移动开发 (4)
About This Entry
Odoo 中的内置特殊模型
Odoo 微信模块 Oejia_wx 基本使用说明
About This Blog
main index
to find recently
archives
to find all
标签
微信模块发布记录
微信模块
小程序商城
Web
Http
客服系统
OE商城
审批OA
HTML5
Markdown
DjangoX
解析
oeshop
Excel
PyQT
YouPBX
markdown
示例
服系统
Python
md
最近发布
Odoo商城模块 Oejia_weshop v1.3 发布,增加中英多语言支持及客户子账号模式!
OSError [Errno 5] Input/output error 异常处理
Odoo context 的常见使用示例
Odoo 符合国人菜单导航习惯的后台主题,支持最新的Odoo17、16等版本,支持企业版!
Odoo 官方应用市场开启 Odoo17 应用的发布!增加了行业应用专栏
Odoo商城模块 Oejia_weshop v1.2 发布,多商户、分销增强,增加商家端!
处理 Error Failed to download metadata for repo ‘appstream‘ Cannot prepare internal mirrorlist
Odoo 16 关键变化 change the term "acquirer" to "provider"
企业微信错误码 81013 的排查与处理
Friend Links
Oejia技术梦博客分享
YouMd,爱上MarkDown
Mole轻量级wsgi架子