什么是odoo
odoo是一套全球开源的ERP/CRM系统。
开发语言:python
数据库:PostgreSQL
系统采用较灵活的模块架构,内置了许多功能强大的常用模块。用户可以按需从模块库中选择模块进行安装、卸载和升级的管理操作。也可以选用第三方模块或者自己开发的模块。
常用模块包括:采购管理,销售管理,库存管理,财务管理,货品管理,营销管理,客户关系管理,生产管理,人事管理,服务支持等等。
odoo的底层框架非常强大,基于werkzeug,采用MVC模式,允许开发者对已有模块进行扩展,也可以完全摒弃内置模块,使用自己开发的模块。
版本:
Odoo有两种不同的版本:社区版和企业版。企业版包含仅限于企业版客户和合作伙伴的代码。社区版免费向所有人开放。
运行
安装Python
odoo使用的开发语言是Python,在运行odoo之前需要先安装Python。
安装PostgreSQL
odoo使用的数据库是Postgresql,在运行odoo之前需要先安装好数据库。
略。
安装odoo(社区版)
多种方式
其他
在线使用、安装包、docker等,节省时间。
源码安装
获取源码直接运行,方便进行模块开发。
有两种获取Odoo源代码的方式:zip压缩包或通过git。
git:
源码目录结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | odoo-13.0 ├── CONTRIBUTING.md ├── COPYRIGHT ├── LICENSE ├── MANIFEST.in ├── README.md ├── SECURITY.md ├── addons # 内置模块 ├── debian ├── doc ├── odoo ├── odoo-bin # 启动脚本 ├── requirements.txt # 依赖 ├── setup ├── setup.cfg └── setup.py |
安装依赖
1 | pip install -r requirements.txt |
启动
1 | python odoo-bin |
可以看到odoo运行在本地的8069端口
1 2 3 4 5 | 2020-06-10 15:42:27,366 2701 INFO ? odoo: Odoo version 13.0 2020-06-10 15:42:27,366 2701 INFO ? odoo: addons paths: ['/Users/luxiaqiang/MyProjects/odoo-13.0/odoo/addons', '/Users/luxiaqiang/Library/Application Support/Odoo/addons/13.0', '/Users/luxiaqiang/MyProjects/odoo-13.0/addons'] 2020-06-10 15:42:27,367 2701 INFO ? odoo: database: default@default:default 2020-06-10 15:42:27,625 2701 INFO ? odoo.addons.base.models.ir_actions_report: You need Wkhtmltopdf to print a pdf version of the reports. 2020-06-10 15:42:28,020 2701 INFO ? odoo.service.server: HTTP service (werkzeug) running on luxiaqiang-mbp.local:8069 |
使用
浏览器打开http://127.0.0.1:8069/可以看到,跳转到了数据库创建页面
image-20200610235140484.png
odoo运行依赖于数据库,第一次进入需要先创建数据库
创建数据库后,自动登录跳转到应用页面,使用的账号密码就是创建数据库时输入的Email和Password
安装联系人模块
模块开发
创建模块
1 | python odoo-bin scaffold test ./my_addons |
1 2 3 4 5 6 7 8 9 | my_addons │ └── test │ ├── __init__.py │ ├── __manifest__.py # Odoo模块必须的文件,包含必要的模块信息。 │ ├── controllers # 主要是一些HTTP请求相关的业务逻辑 │ ├── demo │ ├── models # 模型文件夹,业务的模型都放在这里。 │ ├── security # 权限相关的文件 │ └── views # 视图文件夹,关于界面布局的逻辑在这里。 |
编辑models文件夹下的models.py文件
1 2 3 4 5 6 7 8 9 10 | from odoo import models, fields, api class test(models.Model): _name = 'test.test' _description = 'test.test' name = fields.Char() value = fields.Integer() description = fields.Text() |
编辑views文件夹下的view.xml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <odoo> <data> <!-- Top menu item --> <menuitem name="test" id="test.menu_root"/> <!-- explicit list view definition --> <record model="ir.ui.view" id="test.list"> <field name="name">test list</field> <field name="model">test.test</field> <field name="arch" type="xml"> <tree> <field name="name"/> <field name="value"/> <field name="description"/> </tree> </field> </record> </data> </odoo> |
修改_manifest_.py文件
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 32 33 34 35 | { 'name': "test", 'summary': """ Short (1 phrase/line) summary of the module's purpose, used as subtitle on modules listing or apps.openerp.com""", 'description': """ Long description of module's purpose """, 'author': "My Company", 'website': "http://www.yourcompany.com", # Categories can be used to filter modules in modules listing # Check https://github.com/odoo/odoo/blob/13.0/odoo/addons/base/data/ir_module_category_data.xml # for the full list 'category': 'Uncategorized', 'version': '0.1', # any module necessary for this one to work correctly 'depends': ['base'], # always loaded 'data': [ 'security/ir.model.access.csv', 'views/views.xml', 'views/templates.xml', ], # only loaded in demonstration mode 'demo': [ 'demo/demo.xml', ], "application": True } |
使用配置文件启动
当修改了py文件时,需要重启odoo进程,而修改了xml等静态文件则需要升级模块。
vim odoo.conf
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 32 33 34 35 36 37 | [options] addons_path = /Users/luxiaqiang/MyProjects/odoo-13.0/odoo/addons,/Users/luxiaqiang/MyProjects/odoo-13.0/addons,/Users/luxiaqiang/MyProjects/odoo-13.0/my_addons admin_passwd = $pbkdf2-sha512$25000$d67VGoNwTknp3bv33hsD4A$sVG6/LbAEFo37jdxOFxBqreWxKmqCH6GUAL1npxMQjJdsclqwq4yeH5kWV8TZ3lwqpZTvY9BVx72XTYMAJ4yDQ csv_internal_sep = , data_dir = /Users/luxiaqiang/Library/Application Support/Odoo db_host = False db_maxconn = 64 db_name = odoo db_password = False db_port = False db_sslmode = prefer db_template = template0 db_user = False dbfilter = demo = {} email_from = False geoip_database = /usr/share/GeoIP/GeoLite2-City.mmdb http_enable = True http_interface = http_port = 8069 import_partial = limit_memory_hard = 2684354560 limit_memory_soft = 2147483648 limit_request = 8192 limit_time_cpu = 60 limit_time_real = 120 limit_time_real_cron = -1 list_db = True log_db = False log_db_level = warning log_handler = :INFO log_level = info logfile = longpolling_port = 8072 max_cron_threads = 2 osv_memory_age_limit = 1.0 "odoo.conf" 59L, 1510C |
启动
1 | python odoo-bin -c odoo.conf --def=all |
image-20200611005521882.png
image-20200611005607154.png
image-20200611005708852.png