自动化平台开发的几点总结

时间:2022-05-05
本文章向大家介绍自动化平台开发的几点总结,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

最近花了些时间在琢磨自动化平台开发的事情,所以每天都会抽出几个小时来写一写,大方向的开发任务算是逐步有了眉目。如果客观来说,这部分的工作算是完成了20%左右。前期花在基础架构上的功夫比较多。

为了方便平台化的开发,我主要考虑了一下几点:

  1. 动态菜单,不同权限,不同业务的人看到的菜单是不一样的
  2. 对于权限的粒度把握,增删改查的业务权限尽管声明了不同的菜单权限,但是权限的粒度还是需要考虑的。
  3. 对于操作日志的记录,做了什么操作,哪些操作这些信息还是需要格外重视的。
  4. 基础功能实现可配置化,比如菜单,权限,这些都是基础的数据,完全实现配置化的工作,会让整个平台的可操作性提高不少。

从最开始的时候,我是本着从简的思路,能用一个表搞定,绝对不适用两个表。设计的时候,允许部分的数据冗余,确切的说,我不喜欢过度设计,因为耦合度太低,最终还是要花大力气整合起来。

模型设计中的枚举值

在前期的准备过程中,最开始写页面的时候,对于枚举值都是在MTV的M层来定义,我在models.py文件里面做了很多的配置,但是发现按照这种扩展的方式,后期处理就很尴尬了。因为ORM层面的映射是体现不出这种枚举值的差异的。而且数据从后端到前端,还得逐个转换一般,比如这种方式,在实际的前端页面中,还需要二次过滤,看起来实现了配置化,但是效率确实不高。

class Cmdb_server(models.Model):
    db_types_choices = (
        ('mysql', u'MySQL'),
        ('redis', u'Redis'),
        ('greenplum', u'GreenPlum'),
    )
    db_role_choices =(
        ('master', u'Master'),
        ('slave', u'Slave'),
    )
    server_status_choices = (
        ('1','online'),
        ('0','fault'),
        ('2','offline'),
    )
    server_os_hostname = models.CharField(max_length=50,verbose_name='主机名')

所以越是扩展和改变代码,发现这个地方越来越是一个坑,所以在后面果断使用了数据字典的配置方式来统一管控。

动态二级菜单

我希望实现的一个比较规范的功能就是动态菜单,即不同权限的用户看到的菜单项是不同的。前后改了好几版,总算是把整个流程调通了。

设计到细节的时候,发现很容易有使用的歧义或者不明确的地方。

二级菜单的设计真是一把辛酸泪,最开始感觉这个很简单,一个for循环能够搞定,但是落实到代码层面,琢磨了很多想法,发现自己最开始的切入点就不太对,循环输出HTML标签,结束标签的循环就是一个技巧了。

写了很多版本,至少有6个版本,有的菜单不够稳定,有的显示出来乱七八糟的。拿着代码反反复复看了多遍,赶紧还是有点抓耳挠腮的感觉,于是乎直接把关键代码打印出来,在那儿盘算了一会,总算是得出了满意的答案。

改造一个统一的模板

开发这个平台的时候,如果为了降低开发的难度,提高资源的可重复效率,是用统一的模板,然后在这个基础上修修改改即可。但是实际上自己看了很多原型之后,发现目前的实现和现在的存在着较大的差异。所以这样一个件看起来不闹心的事情,自己就花了一些精力,专门来做统筹的工作。

按照优先级,否则易陷入死胡同

在开发的过程中,总是会冒出一些想法来,想自己能够实现一些比较好的功能,但是实际上,这个过程总是事与愿违。一个看起来简单的功能,想追求完美,但是实际这样下来,效率不高,效果反而会差一些。还是需要按照优先级来做,而不要总是被打断。