python(05) 實戰Django-models

想給自己工作寫款工具,因各種原因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__
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容