美文网首页Python开发
python(05) 实战Django-models

python(05) 实战Django-models

作者: 灼灼2015 | 来源:发表于2017-08-08 16:15 被阅读221次

    想给自己工作写款工具,因各种原因delay...
    1:在选定python后,买了三本以上的python来看,跟着书做练习。
    2:认为自己不会写前台代码,于是花了近1个月的业余时间在freecodecamp上练习闯关301关。
    这两项花了近2个月的业余时间

    即使花了这么多的时间,发现自己还是不知道从什么地方开始,于是去找python语言开发的项目,选中jumpserver,在它的基础之上自己增加了一个应用管理功能,实现应用增加、修改、删除、检查应用状态、启动应用、停止应用、导入和导出等,总共消耗时间不超过3天。

    在这个过程中,才察觉之前那些都不是最佳学习路径,旁枝末节可以给自己增加无谓的信心,但对主要做的事情影响并不大,最快速的学习方式模仿,参考已有案例开始实践,在需要用到具体技能时才开始学习,而不是一开始捧着本厚厚的书,学会了N多细小的点,却不知如何串联使用,慢慢消耗激情。

    jumpserver选中的是Django框架,首要学习Django框架是如何运行起来的,可参考前面python(02)--(04),知道这些后就可以开始正式开发工作啦。

    需求:监控jenkins中项目的构建,对已打标记的构建,做版本发布,并提交给实施部门,实施部门根据接收到的发布版本进行升级工作。
    现状:
    1)发布包没地方管,当前在各个测试人员的电脑上
    2)已发布版本找不到SVN/Git上的对应的地址
    3)不知道现网是哪个版本
    4)不知道已发布的包情况(有没有升级,升级包质量好还是坏)
    设计:
    PCI:在管理中和jenkins关联的项目
    PCI_BUILD: jenkins中项目的构建信息
    PCI_RELEASE: 出包
    ONLINE_VERSION: 现网版本管理

    在modle阶段

    1. 字段下拉列表选择数据

      UPGRADE_RESULT =(
        ('SUCCESS', u"SUCCESS"),
        ('FAIL', u"FAIL"),
      )
      upgrade_result = models.CharField(choices=UPGRADE_RESULT,max_length=512, blank=True)  #升级结果:升级成功、升级失败
      
    2. 用到属性CharField、IntegerField、DateTimeField、TextField、FileField

       release_url = models.FileField(upload_to='./releaseStorage/%Y/%m/%d',blank=True,null=True)   #发布包的文件上传文件存储目录和按年月日目录进行存储
      
    3. 用到外键pro = models.ForeignKey(Project)

    4. 用到组合主键

       class Meta:
            unique_together = ("pci_build", "pro") 
      
    5. 外键引用时显示该对象想要显示的名字 而不是Object

         def __unicode__(self):
               return self.build_name
          __str__ = __unicode__
      
    6. 字段值唯一unique=True

        job_name = models.CharField(max_length=50,blank=True,unique=True)
      
    7. 默认值

        feedback_info = models.CharField(max_length=512,default= 'Not    upgraded')  #跟着发布包的后续(升级成功、升级失败及原因、未升级)
      

    全类如下:

    # coding: utf-8
    from django.db import models
    from projects.models import Project
    
    __all__ = ['PCI','PCI_BUILDS','PCI_RELEASE','ONLINE_VERSION']
    
    UPGRADE_RESULT =(
        ('SUCCESS', u"SUCCESS"),
        ('FAIL', u"FAIL"),
        )
    
    class PCI(models.Model) :
        pro = models.ForeignKey(Project)
        job_name = models.CharField(max_length=50,blank=True,unique=True) #在jenkins中名字 ,持续集成名称--同项目名
        last_build_number = models.IntegerField(blank=True, null=True) #在jenkins中最新的一次构建号
        last_build_result = models.CharField(max_length=1024,blank=True) #在jenkins中最新的一次构建结果
        last_build_url = models.CharField(max_length=1024,blank=True) #在jenkins中最新的一次构建URL
        last_update_time =  models.DateTimeField(blank=True, null=True)  #更新时间
        pro_scm =  models.CharField(max_length=20,blank=True) #项目是SVN,还是GIT
    
        def __unicode__(self):
            return self.job_name
        __str__ = __unicode__
    
    class PCI_BUILDS(models.Model) :
        pci = models.ForeignKey(PCI)
        pro = models.ForeignKey(Project)
        build_name = models.CharField(max_length=512,blank=True, null=True)
        build_number = models.IntegerField(blank=True, null=True,verbose_name=u"构建号") #在jenkins中最新的一次构建号
        build_result = models.CharField(max_length=1024,blank=True) #在jenkins中最新的一次构建结果
        build_url = models.CharField(max_length=1024,blank=True) #在jenkins中最新的一次构建URL
        update_time =  models.DateTimeField(blank=True, null=True)  #更新时间
        build_tags = models.CharField(max_length=1024,null=True) #在jenkins中tags
    
        def __unicode__(self):
            return self.build_name
        __str__ = __unicode__
    
    class PCI_RELEASE(models.Model):
        pro = models.ForeignKey(Project)
        pci_build = models.ForeignKey(PCI_BUILDS)
        build_name = models.CharField(max_length=512, blank=True, null=True)
        release_name = models.CharField(max_length=512,null=True, blank=True)  #发布包名
        release_date = models.DateTimeField(null=True, blank=True)             #发布时间
        release_info = models.TextField(blank=True,null=True)      #发包信息
        release_url = models.FileField(upload_to='./releaseStorage/%Y/%m/%d',blank=True,null=True)   #发布包的文件
        release_user = models.CharField(max_length=20, blank=True,null=True,)  # 出包人
        feedback_info = models.CharField(max_length=512,default= 'Not upgraded')  #跟着发布包的后续(升级成功、升级失败及原因、未升级)
    
        class Meta:
            unique_together = ("pci_build", "pro") #这是重点
    
        def __unicode__(self):
            return self.build_name
        __str__ = __unicode__
    
    class ONLINE_VERSION(models.Model):
        pro = models.ForeignKey(Project)
        pci_release = models.ForeignKey(PCI_RELEASE)
        release_name = models.CharField(max_length=512, blank=True)  # 发布包名
        IM_plan = models.TextField(blank=True)                   #实施方案
        upgrade_date = models.DateField(null=True, blank=True)             #升级时间
        upgrade_result = models.CharField(choices=UPGRADE_RESULT, max_length=512, blank=True)  #升级结果:升级成功、升级失败
        upgrade_fail_desc = models.CharField(max_length=1024, blank=True)   #升级失败的描述
        upgrade_user = models.CharField(max_length=20, blank=True)  # 升级的操作者
    
        def __unicode__(self):
            return self.release_name
        __str__ = __unicode__
    

    相关文章

      网友评论

        本文标题:python(05) 实战Django-models

        本文链接:https://www.haomeiwen.com/subject/ziawpttx.html