开源市场介绍
DTCloud开发者社区,赋能开发者,共建企业应用市场。
集体开发者,可在开源市场下载安装模块,也可将本人开发的模块,上传开源市场。
DTCloud模块开发标准
1.利用模块目录
- 项目名称
- 对立的前缀 dt_
- 对立为英语字母小写
- 不必驼峰表示法,如果有多个单词,倡议以"_"分隔,比方 dictionary_management 这两个单词之间为
_
下划线。
- 各目录含意
api 提供内部调用接口
controller 控制器
data 数据
demo 必须要有demo,用户须要晓得怎么操作
doc 放入相干文档,如doc等,用于介绍我的项目或其它
edi 数据交换
i18n 语言目录
models 模型定义
report 报表相干
security 权限相干
static 动态文件等
tests 寄存python或yml测试用例
views 视图模板
wizard 寄存长期的model和视图
2. __manifest__.py规范
对立文件正文,除最初一行日期,其它不倡议更改
# -*- coding: utf-8 -*-# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&# DTCloud v2.0# QQ: 35350428# 邮件: 35350428@qq.com# 手机: 13584935775# 作者: 'zyf_Amos'# 公司网址: http://www.dtcloud360.com# Copyright 中亿丰数字科技有限公司 2012-2022 Amos# 日期: 2022/5/29
manifest.py规范
{ 'name': "百度地图", # 模块名称 'summary': """百度地图视图""", # 模块介绍 'category': '中台利用/地图', 'author': "zyfd_Amos", # 模块开发者名称 'website': "http://www.dtcloud360.com", 'depends': ['web'], 'version': '1.0', # 版本号留神, 两位,初始版本为1.0 'installable': True, 'application': True, 'auto_install': False, 'license': 'LGPL-3', 'price': '10', # 模块价格,在利用市场上会显示这里的价格 'currency': 'CNY', # 价格以人民币为规范 'data': [ 'security/data.xml', 'views/views.xml', 'views/templates.xml', ], 'images': [ 'static/description/static/images/map.png', 'static/description/banner.png', ], 'assets': { 'web.assets_backend': [ 'dt_map/static/src/js/bmap_model.js', 'dt_map/static/src/js/bmap_controller.js', 'dt_map/static/src/js/bmap_view.js', 'dt_map/static/src/js/bmap_render.js', 'dt_map/static/src/js/geolocation.js', 'dt_map/static/src/css/bmap.css', 'dt_map/static/src/css/bmap_view.scss', ], 'web.assets_qweb': [ 'dt_map/static/src/xml/bmap.xml', 'dt_map/static/src/xml/geolocation.xml', ], }, 'description': """""", # 相干模块介绍}
- 分类
中台利用:根底,短信,邮件,地图
解决方案:XX智慧工地解决方案,XX公司ERP解决方案等
企业应用:销售,洽购,仓库,生产,会计,人事,我的项目等
工地利用:IOT设施(门禁,视频,门磁,升降机等),人员治理等
楼宇利用:IOT设施(空调,门禁),客房零碎,停车零碎等
城市利用:智慧社区,智慧园区,智慧城市等
3. Banner图片、icon文件文件等,可参照以下文档局部
https://blog.csdn.net/ekcchina/article/details/125080888
DTCloud罕用代码开发命名规定
罕用
- 防止创立生成器和装璜器:仅应用DTCloud API已有的
- 可应用filtered,mapped,sorted办法来晋升代码可读性和性能
尽量应用ORM
当ORM能够实现的时候尽量应用ORM而不要间接写sql,因为它可能会绕过orm的一些规定如权限、事务等,还会让代码变得难读且不平安。# 谬误的写法,注入危险,代码效率低self.env.cr.execute('SELECT id FROM auction_lots WHERE auction_id in (' + ','.join(map(str, ids))+') AND state=%s AND obj_price > 0', ('draft',))auction_lots_ids = [x[0] for x in self.env.cr.fetchall()]# 不会被注入,但依然是谬误的写法self.env.cr.execute('SELECT id FROM auction_lots WHERE auction_id in %s '\ 'AND state=%s AND obj_price > 0', (tuple(ids), 'draft',))auction_lots_ids = [x[0] for x in self.env.cr.fetchall()]# 举荐的写法auction_lots_ids = self.search([('auction_id','in',ids), ('state','=','draft'), ('obj_price','>',0)])
新增
values = { 'name': '',}obj = self.env['models'].create(values)
批改
values = { 'state': '已审核',}self.sudo().write(values)
删除
self.unlink()
查问
obj = self.env['models'].search([('name', '=', '')], order="sequence, id desc", limit=1)或model_data = self.env['model'].search_read([('module', '=', 'amos')], ['res_id'])
读取
self.env['models'].browse(id)
计数
domain = [('company_id', '=', self.env.ref('base.main_company').id)]rows_count = self.env['account.account'].search_count(domain)
- 避免注入
不要用python的+号连接符、%解释符来拼sql
# 谬误的写法self.env.cr.execute('SELECT distinct child_id FROM account_account_consol_rel ' + 'WHERE parent_id IN ('+','.join(map(str, ids))+')')# 举荐的写法self.env.cr.execute('SELECT DISTINCT child_id '\ 'FROM account_account_consol_rel '\ 'WHERE parent_id IN %s', (tuple(ids),))
- 不要手动提交事务
DTCloud有本人的一套机制用于事务处理,如self._cr.commit(),非凡场景除外
- 符号和习惯
模型名-应用.分隔,模块名做前缀
- 定义DTCloud模型时,应用复数模式的名字如res.user,res.partner
- 定义wizard时,命名格局为<related_base_model>.<action>,related_base_model是关联模型名称,action是性能简称,如account.invoice.make
- 定义报表模型时,应用<related_base_model>.report.<action>,和wizard一样
- python类-应用驼峰命名形式AccountInvoice。 如果是DTCloud表对象应用account_invoice(小写)
- 变量名
- 模型变量应用驼峰命名形式
- 一般变量用下划线+小写字母
因为新api中记录是汇合模式,当变量不蕴含id时不以id作后缀
ResPartner = self.env['res.partner']partners = ResPartner.browse(ids)partner_id = partners[0].id
- One2Many, Many2Many字段个别以ids作为后缀如:sale_order_line_ids
- Many2One 个别以_id为后缀如:partner_id, user_id
办法命名
计算字段 - 计算方法个别是_compute_<field_name>
默认办法 - _default_<field_name>
onchange办法 - _onchange_<field_name>
束缚办法 - _check_<constraint_name>
action办法 - 一个对象的动作办法个别以action_结尾,它的装璜器是@api.multi,如果它只应用单条计算,可在办法头增加self.ensure_one()
接口
- 工作流
_api_my_workflow :与零碎中的事件名称一一对应,APP的按钮有后盾接口提供动态显示 - 一条记录
_api_one :数据库中一条记录 - 列表
_api_page :带分页的数据集 - 排序
_api_page_order:列表显示程序 - 过滤
_api_page_domain :列表数据显示规定 - 置顶
_api_top_time :列表排序中退出
API接口罕用
- 创立
_api_create :因为非凡起因要对数据做解决,所以要给前端提供后盾解决 - 批改
_api_write :能够做更多判断操作,如果没有更多操作能够间接走零碎批改 - 删除
_api_unlink :次要是提供删除判断,能够提供软删除 - 调配
_api_distribution :单据上绑定相操作人 - 支付
_api_receive :单据认领