日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

odoo12 mysql_odoo12从零开始:二、1)个性化定制odoo12之修改数据库创建页面

發布時間:2024/9/19 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 odoo12 mysql_odoo12从零开始:二、1)个性化定制odoo12之修改数据库创建页面 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

劇情回顧

上一文章,我們已經成功運行了odoo12,并訪問localhost:8069看到如下界面:

我們還沒有創建數據庫,但是我們發現,數據庫管理頁面的logo是odoo,數據庫頁面全是英文的,對于我們國內用戶來說,這是不太友好的。我們想要自定義這個數據庫頁面,有沒有辦法?答案是肯定的。

本節代碼

git clone -b v2.1 https://github.com/lingjiawen/odoo_project.git

探索數據庫頁面

我們在Chrome瀏覽器右鍵檢查odoo的logo,發現它的url是"/web/static/src/img/logo2.png",也就是說,它處于web模塊下的static目錄,我們在odoo12/addons中找到web模塊static/src/img下的logo2.png文件,確認一下,果然是這個logo。再在web模塊下搜索logo2.png,發現引用文件是web/views里面的database_manager.html,發現這個文件也就是我們上面看到數據庫管理頁面

我們直接替換這個logo或者直接更改database_manager.html是否可以替換掉原生logo或者其他信息呢?答案是可以的,但是odoo的開源協議并不允許我們這么做。

我們繼續在web模塊下搜索database_manager.html,發現在controllers/main.py文件下Database類中的_render_template方法便是對數據庫管理頁面進行渲染。

那么我們要如何對這個頁面進行修改呢?

有經驗的朋友可能會說,我們寫一個模塊,在controller中繼承這個Database類,重寫_render_template方法,就可以實現這個對頁面的重寫。

這個方法在數據庫完成創建并安裝所寫模塊后,是可以生效的!我們對登錄界面等的重寫也將采用繼承修改的辦法。但是,在第一次運行odoo時,還沒有任何的數據庫,也不可能安裝任何的模塊,所以此時這種方法是行不通的。那我們要怎么做呢?這就涉及到python運行時動態改變類的方法——猴子補丁(Monkey Patch)

猴子補丁(Monkey Patch)

簡要介紹一下:

classA:deffunc(self):print('A')defmonkey(self):print('B')

a=A()

A.func= monkey #a已經創建了實例,在運行時對對象的方法進行修改

a.func() #運行結果:B

上述便是monkey patch的基本概念,如果您有興趣,可以自行學習深入了解。現在我們用這個方法對我們的數據庫頁面進行修改。

創建模塊,在運行時替換數據庫頁面渲染方法

我們先在主目錄下新建my_addons目錄,在my_addons目錄下新建一個模塊base_customize,將web下的數據庫html復制到template下,在staic/src/img中放入需要替換的favicon.ico和logo2。細心的朋友可能會注意到下面的init和manifest文件,現在先不用管它,沒有也不影響。

緊接著在主目錄下新建core目錄,新建patch目錄和其目錄下的database.py文件和__init__.py文件

database.py

1 #-*- coding: utf-8 -*-

2 importos3 importjinja24 importodoo5

6 from odoo importhttp7 from odoo.addons.web importcontrollers8

9 os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

10

11 #更改數據庫頁面,env環境更改為'my_addons/base_customize/template'

12 path = os.path.realpath(os.path.join(os.path.dirname(__file__), '..', '..', 'my_addons/base_customize/template'))13 loader =jinja2.FileSystemLoader(path)14 env = jinja2.Environment(loader=loader, autoescape=True)15

16

17 db_monodb =http.db_monodb18 DBNAME_PATTERN = '^[a-zA-Z0-9][a-zA-Z0-9_.-]+$'

19

20

21 def _render_template(self, **d):22 d.setdefault('manage', True)23 d['insecure'] = odoo.tools.config.verify_admin_password('admin')24 d['list_db'] = odoo.tools.config['list_db']25 d['langs'] =odoo.service.db.exp_list_lang()26 d['countries'] =odoo.service.db.exp_list_countries()27 d['pattern'] =DBNAME_PATTERN28 #databases list

29 d['databases'] =[]30 try:31 d['databases'] =http.db_list()32 d['incompatible_databases'] = odoo.service.db.list_db_incompatible(d['databases'])33 exceptodoo.exceptions.AccessDenied:34 monodb =db_monodb()35 ifmonodb:36 d['databases'] =[monodb]37 return env.get_template("database_manager.html").render(d)38

39

40 defpatch_database():41 controllers.main.Database._render_template = _render_template

我們將_render_template重寫,只修改了env的指定環境為my_addons/base_customize/template,這樣數據庫管理頁面就更改成了指定環境下的database_manager.html文件

patch_database方法運行時修改Database._render_template方法為我們重新定義的方法。

然后在同級__init__.py中引入patch_database文件

#-*- coding: utf-8 -*-

from core.patch.database importpatch_databasedefmonkey_patch():

patch_database()

最后,我們修改主目錄下的運行文件set-up.py

#!/usr/bin/env python3

#set server timezone in UTC before time module imported

importosimportsys__import__('os').environ['TZ'] = 'UTC'LIB_PATH= os.path.join(os.path.split(os.path.realpath(__file__))[0], '.', 'odoo12')

sys.path.append(LIB_PATH)importodooif __name__ == "__main__":from odoo.modules.module import(

load_openerp_module,

)

load_openerp_module('web')from core importpatch

patch.monkey_patch()

odoo.cli.main()

代碼大意: 預加載web模塊,引入core/patch,調用monkey_patch方法進行運行時替換

最后,我們修改my_addons/base_customize/template下的html文件,重啟服務器即修改成功。

圖片內的修改內容:1、左上角title改為odoo12 customize2、修改了logo23、修改英文為中文4、修改了默認語言為中文,默認國家為中國

其他更多修改均可在html內直接完成,快動手嘗試一下吧!

項目啟動日志patch

最后,與patch同級還有一個__init__文件,內容如下:

#-*- coding: utf-8 -*-

definit_patch():print('''use odoo12 customize installation designed by misterling.''')

#!/usr/bin/env python3

#set server timezone in UTC before time module imported

importosimportsys__import__('os').environ['TZ'] = 'UTC'LIB_PATH= os.path.join(os.path.split(os.path.realpath(__file__))[0], '.', 'odoo12')

sys.path.append(LIB_PATH)importodoofrom core importinit_patchif __name__ == "__main__":

init_patch()from odoo.modules.module import(

load_openerp_module,

)

load_openerp_module('web')from core importpatch

patch.monkey_patch()

odoo.cli.main()

再次修改set-up.py,引入并運行init_patch,重啟服務器,你可以看到patch效果

聲明

轉載請注明出處,文章如有雷同(不大可能吧hh)或者侵權,請聯系刪除。

有任何問題,聯系郵箱:26476395@qq.com

總結

以上是生活随笔為你收集整理的odoo12 mysql_odoo12从零开始:二、1)个性化定制odoo12之修改数据库创建页面的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。