首页 > 其他分享 >DTCloud模块开发规范

DTCloud模块开发规范

时间:2023-02-07 09:47:37浏览次数:53  
标签:map DTCloud env self 规范 api static 模块 id

开源市场介绍

DTCloud开发者社区,赋能开发者,共建企业应用市场。

个人开发者,可在开源市场下载安装模块,也可将自己开发的模块,上传开源市场。

DTCloud模块开发规范

1.应用模块目录

在这里插入图片描述

  • 项目名称
  1. 统一的前缀 dt_
  2. 统一为英语字母小写
  3. 不用驼峰表示法,如果有多个单词,建议以"_"分隔,比如 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
# 邮件: [email protected]
# 手机: 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(),特殊场景除外

  • 符号和习惯

模型名-使用.分隔,模块名做前缀

  1. 定义DTCloud模型时,使用单数形式的名字如res.user,res.partner
  2. 定义wizard时,命名格式为<related_base_model>.,related_base_model是关联模型名称,action是功能简称,如account.invoice.make
  3. 定义报表模型时,使用<related_base_model>.report.,和wizard一样
  4. python类-使用驼峰命名方式AccountInvoice。 如果是DTCloud表对象使用account_invoice(小写)
  • 变量名
  1. 模型变量使用驼峰命名方式
  2. 普通变量用下划线+小写字母
  3. 由于新api中记录是集合形式,当变量不包含id时不以id作后缀
ResPartner = self.env['res.partner']
partners = ResPartner.browse(ids)
partner_id = partners[0].id
  1. One2Many, Many2Many字段一般以ids作为后缀如:sale_order_line_ids

  2. Many2One 一般以_id为后缀如:partner_id, user_id

  3. 方法命名

    计算字段 - 计算方法一般是_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 :单据认领

标签:map,DTCloud,env,self,规范,api,static,模块,id
From: https://www.cnblogs.com/DTCLOUD/p/17097343.html

相关文章

  • DTCloud开源社区模块介绍说明
    模块介绍DTCloud开发者社区,赋能开发者,共建企业应用市场。DTCloud开源社区模块,即dt_open_source_community,为本地开发者,登陆开发者社区,购买应用提供了便利。启动流程1......
  • Ansible的部署和命令模块
    一、ansible的概述1.1ansible简介Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。它用Python写成,类似于saltstack和Puppet,但是有一个不同和优点是我们不......
  • MDA500-16-ASEMI单臂共阳极整流模块MDA500-16
    编辑-ZMDA500-16在MDA封装里采用的2个芯片,是一款单臂共阳极整流模块。MDA500-16的浪涌电流Ifsm为20000A,漏电流(Ir)为25mA,其工作时耐温度范围为-40~150摄氏度。MDA500-16采用......
  • ASEMI整流模块MSAD110-16图片,MSAD110-16体积
    编辑-ZASEMI整流模块MSAD110-16参数:型号:MSAD110-16最大重复峰值反向电压(VRRM):1600V最大RMS电桥输入电压(VRMS):1700V最大平均正向整流输出电流(IF):110A峰值正向浪涌电流(IFSM):2500A......
  • MDA500-16-ASEMI单臂共阳极整流模块MDA500-16
    编辑-ZMDA500-16在MDA封装里采用的2个芯片,是一款单臂共阳极整流模块。MDA500-16的浪涌电流Ifsm为20000A,漏电流(Ir)为25mA,其工作时耐温度范围为-40~150摄氏度。MDA500-16采......
  • ASEMI整流模块MSAD110-16图片,MSAD110-16体积
    编辑-ZASEMI整流模块MSAD110-16参数:型号:MSAD110-16最大重复峰值反向电压(VRRM):1600V最大RMS电桥输入电压(VRMS):1700V最大平均正向整流输出电流(IF):110A峰值正向浪涌电流(IFS......
  • gradle构建springboot多模块项目配置
    父模块配置>build.gradlebuildscript{//统一版本管理ext{springBootVersion='2.3.12.RELEASE'springCloudVersion='Hoxton.SR12'......
  • 树莓派 - L298N模块 驱动直流电机
    单片机或树莓派一般使用L298n模块来驱动电机。L298N的实物图如下。注意的地方:1.5v电源可以不用2.同一侧写代码的时候必须是一高一低,如果是相同的话是走不了的,这里每......
  • 树莓派 - L298N模块 驱动直流电机
    单片机或树莓派一般使用L298n模块来驱动电机。L298N的实物图如下。[img]http://dl2.iteye.com/upload/attachment/0129/1777/c59d5e4a-32e0-3e73-......
  • 若依微服务版(SpringBoot/SpringCloudAlibaba)中在单个服务模块中进行单元测试
    场景若依微服务版手把手教你本地搭建环境并运行前后端项目:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109363303在上面的基础上需要在某个服务模块中......