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-05-04 :
微信模块 Oejia_wx v0.5.1 发布,优化聊天会话缓存及多db模式的支持
2022-12-29 :
在 Odoo 中使用 WebSocket 并兼容Odoo的Session会话识别
2022-05-15 :
远程登录提示“找不到匹配的keyexchange算法”
2018-11-19 :
wkhtmltopdf、PDF导出、字体相关
2018-01-31 :
Odoo 微信模块文档
2022-04-26 :
Odoo 低版本升级到 Odoo15 的处理集锦
2016-12-16 :
Oejia_wx v0.4.0 发布,支持 Odoo10 的微信模块
2021-08-17 :
Odoo POS 集成用户钱包余额支付
2019-11-14 :
Odoo 国内发票 OCR 导入功能介绍
2020-04-12 :
商城——小程序直播模块
官方订阅号
关注订阅实时了解我们更多分享
分类
(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
DjangoX
Markdown
服系统
示例
markdown
Python
md
oeshop
Excel
PyQT
解析
YouPBX
最近发布
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架子