odoo views client reload action

odoo原生常用的reload动作,是整个框架的刷新,源码如下:

还有一个reload_context动作,整体刷新前会先刷新session上下文是否正常,源码如下:

现在需要对一些轻量级的通用场景进行视图层级的数据重载刷新支持,以提高用户体验的舒适度,核心代码如下:

之后就可以在odoo任何层级应用代码里跟调用reload和reload_context一样快捷方便的使用reload_view动作

odoo search view default show filters advanced menu

odoo搜索视图默认是隐藏高级搜索菜单栏,虽然可以打开记住状态,但换台电脑或浏览器默认又是关闭,这就需要改变其缺省机制,源码如下:

odoo ldap plus admin mode local and remote password

双份密码
ODOO配置LDAP模式后,同一个用户有本地密码和LDAP密码,可相同也可不同,两个密码只要任意一个通过验证都可以登录系统

本地密码
本地密码修改需要先验证旧密码是否正确,根据上条定律任意一个本地或远程原密码通过验证即可更新本地新密码

远程密码
远程密码可以做为超级密码来不断重置本地密码

管理模式
配置新增ldap_binddn_admin布尔属性用于确认是否启用LDAP binddn管理员模式,即授权SUPERUSER直接修改用户LDAP远程密码

改密区别

  • 默认普通模式下三种情况:

1、本地和LDAP密码相同,本地和LDAP都更新为新密码
2、本地和LDAP密码不同,本地旧密码通过验证,直接更新本地新密码,但LDAP无法通过验证同步修改
3、本地和LDAP密码不同,LDAP旧密码通过验证,直接更新本地与LDAP新密码

  • 开启Admin管理模式统一:
    1、本地密码和LDAP密码只要通过一个旧密码验证就可以同步双写统一为新的密码

odoo tree view pagination disable unlimited

odoo列表视图分页默认80条记录,但可以点击切换选择200、500、2000、无限制,相关源码如下:

如果系统运行许久积累了大量数据,特别是互联网海量应用,这个无限制就造成了一个性能上的隐患

这里通过继承渲染分页方法,在点击分页信息动态生成记录条数选择的事件上优雅的移除掉最后一个无限制选项

odoo pivot graph view group by date format and order by date desc

分组日期格式自定义

排序日期默认倒序

odoo china baidu maps api

odoo原生内置google maps,导致中国大部分区域不仅无法正常使用,用户浏览器一直加载到超时还拖慢了网站整体

相关源码:

可见针对联系人扩展了静态地图和外链地图两个接口,其参数都是通过模块自身的国家、邮编、城市、街道等地址相关字段构成

了解上诉原理之后,参照百度地图开放平台API,梳理出相近接口的参数异同点后,完全可以改造成具有中国特色的odoo maps

核心代码:

最后顺便将其整合到odoo开源模块Website China Features里,有需要可直接从官方应用市场下载使用
https://apps.odoo.com/apps/modules/9.0/website_china_features/

odoo disabled website homepage

odoo有些模块包含website功能,这就依赖了website这个重量级模块
很多时候仅仅想用其核心功能,并不想因此造成首页变成企业网站

odoo muilt domain dbfilter many to one config and code

odoo支持dbfilter配置用于实现多域名对应多账套,dbfilter是一个python标准正则字符串,并支持特殊的%h、%d这两个动态参数

根据源代码剖析(odoo8、odoo9)
openerp/http.py

由此可见,绝大部分有规律的映射需求都可以得到满足。惟有那些情况特殊,完全没有规则可言的:比如SEO需要、历史数据库命名混乱、甚至多个一级域名只对一个数据库的需求就悲剧了

这里举一个理想的openerp-server.conf扩展配置特例

首先新增支持%m特别参数,用来开启域名数据库映射复杂模式
其次新增支持dbfilter_前缀的域名映射独立配置指定数据库名称(www-zhunlian-net、www-higk-com)
最后迫不得已新增插入两行精炼的源代码

注:一个域名必备的.号在正则表达式领域可用于匹配任意字符,所以域名全称作为正则也可以根据需要匹配出一组数据库列表,如域名renjie.me可同时匹配出数据库名为renjie.me、renjie-me、renjie@me等等相似名称的数据库

python ldap userPassword salt sha md5 encrypt

odoo自带的auth_ldap模块虽然实现了ldap统一账户的验证,但如果用户一旦修改密码就变成同名的本地用户。这是因为odoo默认先验证本地res.users信息,如果没有记录,或者有记录但密码字段为空才会去ldap服务器验证

根据其原理,可以在修改密码的时候对接上ldap的密码信息就完美了,但用modify指令写入的userPassword值是原文存储,即明文直接写入在服务器也是明文,这就需要在请求端预先加密成ldap标准的密文格式

网上看到有很多php的实现都是要写点代码什么的,照葫芦折腾几下才发现python的passlib库居然有现成拿来即用的函数

以此类推

其中ldap_bcrypt,ldap_bsdi_crypt,ldap_des_crypt,ldap_hex_md5,ldap_hex_sha1,ldap_md5,ldap_md5_crypt,ldap_pbkdf2_sha1,ldap_pbkdf2_sha256,ldap_pbkdf2_sha512,ldap_plaintext,ldap_salted_md5,ldap_salted_sha1,ldap_sha1,ldap_sha1_crypt,ldap_sha256_crypt,ldap_sha512_crypt等都是ldap加密相关的兄弟函数,可谓是应有尽有非常丰富,看来在odoo端直接集成phpLDAPadmin里各种类型的加密密码更新都是易事了

odoo addons xml develop debug auto update

odoo以开发者模式运行的话,能自动检测所有的addons目录的代码变动情况自动进行reload
这个机制对于python代码来说是够用的,但是对csv安全规则、xml数据及视图模版来说还需要更新模块才能使其生效

今天由于逐个测试安全规则条目,不断的手工更新模块不胜其烦,只好深入研究一下

odoo9开始已经将开发者模式依赖的pyinotify替换为watchdog,可能是后者的应用范围更广把,不仅提供python库,还附带shell工具

那就学习下这个叫watchmedo的命令行工具吧

看到auto-restart参数后真是让人眼前一亮,根据提示继续学习二级参数

真是太强大了,本以为还要写点小代码什么的,没想到几个选项就可以灵活组合出一个小型的监控工具

-R是目录递归监控
-p是文件模式匹配,主要是排除前端资源和pyc
-d是指定监控目录
–是watchmedo与odoo各自的命令行参数分割线

至此odoo的模块开发效率又提高了一个层次:)