共计 4328 个字符,预计需要花费 11 分钟才能阅读完成。
开源市场介绍
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:单据认领