python(05) 實(shí)戰(zhàn)Django-models

想給自己工作寫款工具刁赖,因各種原因delay...
1:在選定python后逛钻,買了三本以上的python來看贬蛙,跟著書做練習(xí)雨女。
2:認(rèn)為自己不會(huì)寫前臺(tái)代碼,于是花了近1個(gè)月的業(yè)余時(shí)間在freecodecamp上練習(xí)闖關(guān)301關(guān)阳准。
這兩項(xiàng)花了近2個(gè)月的業(yè)余時(shí)間

即使花了這么多的時(shí)間氛堕,發(fā)現(xiàn)自己還是不知道從什么地方開始,于是去找python語(yǔ)言開發(fā)的項(xiàng)目野蝇,選中jumpserver讼稚,在它的基礎(chǔ)之上自己增加了一個(gè)應(yīng)用管理功能,實(shí)現(xiàn)應(yīng)用增加绕沈、修改锐想、刪除、檢查應(yīng)用狀態(tài)乍狐、啟動(dòng)應(yīng)用赠摇、停止應(yīng)用、導(dǎo)入和導(dǎo)出等,總共消耗時(shí)間不超過3天蝉稳。

在這個(gè)過程中抒蚜,才察覺之前那些都不是最佳學(xué)習(xí)路徑,旁枝末節(jié)可以給自己增加無謂的信心耘戚,但對(duì)主要做的事情影響并不大嗡髓,最快速的學(xué)習(xí)方式模仿,參考已有案例開始實(shí)踐收津,在需要用到具體技能時(shí)才開始學(xué)習(xí)饿这,而不是一開始捧著本厚厚的書,學(xué)會(huì)了N多細(xì)小的點(diǎn)撞秋,卻不知如何串聯(lián)使用长捧,慢慢消耗激情。

jumpserver選中的是Django框架吻贿,首要學(xué)習(xí)Django框架是如何運(yùn)行起來的串结,可參考前面python(02)--(04),知道這些后就可以開始正式開發(fā)工作啦舅列。

需求:監(jiān)控jenkins中項(xiàng)目的構(gòu)建肌割,對(duì)已打標(biāo)記的構(gòu)建,做版本發(fā)布帐要,并提交給實(shí)施部門把敞,實(shí)施部門根據(jù)接收到的發(fā)布版本進(jìn)行升級(jí)工作。
現(xiàn)狀:
1)發(fā)布包沒地方管榨惠,當(dāng)前在各個(gè)測(cè)試人員的電腦上
2)已發(fā)布版本找不到SVN/Git上的對(duì)應(yīng)的地址
3)不知道現(xiàn)網(wǎng)是哪個(gè)版本
4)不知道已發(fā)布的包情況(有沒有升級(jí)奋早,升級(jí)包質(zhì)量好還是壞)
設(shè)計(jì):
PCI:在管理中和jenkins關(guān)聯(lián)的項(xiàng)目
PCI_BUILD: jenkins中項(xiàng)目的構(gòu)建信息
PCI_RELEASE: 出包
ONLINE_VERSION: 現(xiàn)網(wǎng)版本管理

在modle階段

  1. 字段下拉列表選擇數(shù)據(jù)

    UPGRADE_RESULT =(
      ('SUCCESS', u"SUCCESS"),
      ('FAIL', u"FAIL"),
    )
    upgrade_result = models.CharField(choices=UPGRADE_RESULT,max_length=512, blank=True)  #升級(jí)結(jié)果:升級(jí)成功、升級(jí)失敗
    
  2. 用到屬性CharField赠橙、IntegerField耽装、DateTimeField、TextField期揪、FileField

     release_url = models.FileField(upload_to='./releaseStorage/%Y/%m/%d',blank=True,null=True)   #發(fā)布包的文件上傳文件存儲(chǔ)目錄和按年月日目錄進(jìn)行存儲(chǔ)
    
  3. 用到外鍵pro = models.ForeignKey(Project)

  4. 用到組合主鍵

     class Meta:
          unique_together = ("pci_build", "pro") 
    
  5. 外鍵引用時(shí)顯示該對(duì)象想要顯示的名字 而不是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. 默認(rèn)值

      feedback_info = models.CharField(max_length=512,default= 'Not    upgraded')  #跟著發(fā)布包的后續(xù)(升級(jí)成功剂邮、升級(jí)失敗及原因、未升級(jí))
    

全類如下:

# 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中名字 ,持續(xù)集成名稱--同項(xiàng)目名
    last_build_number = models.IntegerField(blank=True, null=True) #在jenkins中最新的一次構(gòu)建號(hào)
    last_build_result = models.CharField(max_length=1024,blank=True) #在jenkins中最新的一次構(gòu)建結(jié)果
    last_build_url = models.CharField(max_length=1024,blank=True) #在jenkins中最新的一次構(gòu)建URL
    last_update_time =  models.DateTimeField(blank=True, null=True)  #更新時(shí)間
    pro_scm =  models.CharField(max_length=20,blank=True) #項(xiàng)目是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"構(gòu)建號(hào)") #在jenkins中最新的一次構(gòu)建號(hào)
    build_result = models.CharField(max_length=1024,blank=True) #在jenkins中最新的一次構(gòu)建結(jié)果
    build_url = models.CharField(max_length=1024,blank=True) #在jenkins中最新的一次構(gòu)建URL
    update_time =  models.DateTimeField(blank=True, null=True)  #更新時(shí)間
    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)  #發(fā)布包名
    release_date = models.DateTimeField(null=True, blank=True)             #發(fā)布時(shí)間
    release_info = models.TextField(blank=True,null=True)      #發(fā)包信息
    release_url = models.FileField(upload_to='./releaseStorage/%Y/%m/%d',blank=True,null=True)   #發(fā)布包的文件
    release_user = models.CharField(max_length=20, blank=True,null=True,)  # 出包人
    feedback_info = models.CharField(max_length=512,default= 'Not upgraded')  #跟著發(fā)布包的后續(xù)(升級(jí)成功、升級(jí)失敗及原因绰姻、未升級(jí))

    class Meta:
        unique_together = ("pci_build", "pro") #這是重點(diǎn)

    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)  # 發(fā)布包名
    IM_plan = models.TextField(blank=True)                   #實(shí)施方案
    upgrade_date = models.DateField(null=True, blank=True)             #升級(jí)時(shí)間
    upgrade_result = models.CharField(choices=UPGRADE_RESULT, max_length=512, blank=True)  #升級(jí)結(jié)果:升級(jí)成功枉侧、升級(jí)失敗
    upgrade_fail_desc = models.CharField(max_length=1024, blank=True)   #升級(jí)失敗的描述
    upgrade_user = models.CharField(max_length=20, blank=True)  # 升級(jí)的操作者

    def __unicode__(self):
        return self.release_name
    __str__ = __unicode__
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市狂芋,隨后出現(xiàn)的幾起案子榨馁,更是在濱河造成了極大的恐慌,老刑警劉巖帜矾,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翼虫,死亡現(xiàn)場(chǎng)離奇詭異屑柔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)珍剑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門掸宛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人招拙,你說我怎么就攤上這事唧瘾。” “怎么了别凤?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵饰序,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我规哪,道長(zhǎng)求豫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任诉稍,我火速辦了婚禮蝠嘉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘均唉。我一直安慰自己是晨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布舔箭。 她就那樣靜靜地躺著罩缴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪层扶。 梳的紋絲不亂的頭發(fā)上箫章,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音镜会,去河邊找鬼檬寂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛戳表,可吹牛的內(nèi)容都是我干的桶至。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼匾旭,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼镣屹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起价涝,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤女蜈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伪窖,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡逸寓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了覆山。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竹伸。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖汹买,靈堂內(nèi)的尸體忽然破棺而出佩伤,到底是詐尸還是另有隱情,我是刑警寧澤晦毙,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布生巡,位于F島的核電站,受9級(jí)特大地震影響见妒,放射性物質(zhì)發(fā)生泄漏孤荣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一须揣、第九天 我趴在偏房一處隱蔽的房頂上張望盐股。 院中可真熱鬧,春花似錦耻卡、人聲如沸疯汁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)幌蚊。三九已至,卻和暖如春溃卡,著一層夾襖步出監(jiān)牢的瞬間溢豆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工瘸羡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留漩仙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓犹赖,卻偏偏與公主長(zhǎng)得像队他,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子峻村,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容