測試平臺系列(31) 編寫環(huán)境配置頁面(上)

編寫環(huán)境管理頁面

之前的篇幅里面說過迈着,用例沒有根據(jù)環(huán)境去劃分它的歸屬蛔趴,其實這樣也是不太合理的,畢竟不同的環(huán)境需要的數(shù)據(jù)可能不一致蜘拉,并不一定能編寫完全通用的用例。所以今天我打算從這個頁面下手有鹿,手把手教大家編寫一個完整的CRUD功能(帶前端+聯(lián)調(diào))。后面前端的部分谎脯,如果大家不感興趣的話葱跋,只看后端就好了。因為會有一系列的截圖!看完不說半條命娱俺,那半小時肯定沒了稍味。

有的人可能不理解,環(huán)境不就是那幾套嗎荠卷?測試/預(yù)發(fā)/線上等等模庐。是的,但是各個公司會叫不同的名字油宜,所以我們?yōu)榱酥谱饕豢畲蟊娗彝ㄓ玫墓ぞ叩嗉睿蕴峁┧麄兙S護自己環(huán)境的功能。

CRUD/CURD是什么

經(jīng)常逛脈脈的同學肯定都知道慎冤,經(jīng)常能看到CURD CRUD CRUD boy這樣的詞匯疼燥。直白點說,curd指的就是增刪改查蚁堤,我們今天的內(nèi)容就是這個醉者,且聽我一一道來。

  • 公司最近開了一個新的環(huán)境:fat2披诗,我們系統(tǒng)得維護起來撬即,所以我們需要新增一條fat2環(huán)境的數(shù)據(jù)。

  • 公司又不用這個環(huán)境了呈队,想去掉這個環(huán)境剥槐,免得混淆視聽。

  • fat2環(huán)境公司覺得不好聽掂咒,公司決定改成fat-beta才沧。

  • 公司現(xiàn)在有100多種環(huán)境,太多了绍刮,需要查詢是否有fat77這個環(huán)境温圆。


沒錯,其實很多開發(fā)做的功能都與這個接近孩革。大部分時間都是在做一些crud的工作岁歉。上述是細化到我們這一次環(huán)境管理的功能點,如果你覺得難的話膝蜈,耐心看完(抄完)你就不會覺得難了锅移。

明確思路

首先我們先要搞清楚本次需求,其實需求很簡單饱搏,就是想給用戶提供自定義環(huán)境名的功能非剃。那么我們是不是在數(shù)據(jù)庫需要存儲這些環(huán)境的信息。最基本的信息需要哪些呢推沸?我這里列一下:

數(shù)據(jù)表準備

核心字段:

  • 環(huán)境名稱

比如fat uat pro (是否能重復(fù)备绽?那肯定是不能重復(fù)的呀券坞!)

  • 環(huán)境備注

比如fat是測試環(huán)境啥的啥的,其實也可以不要肺素,但是給你一個選項恨锚,萬一你需要添加一些說明呢

基本字段:

  • 創(chuàng)建人是誰
  • 修改人是誰
  • 什么時候創(chuàng)建的
  • 什么時候更新的
  • 被刪除了木有

功能需求準備

  • 環(huán)境可以通過名字模糊查詢

  • 可以編輯,編輯后會更新編輯時間

  • 可以添加

  • 可以刪除

    功能一拆分倍靡,是不是特別簡單了猴伶,其實需求沒多少,后端可能1小時不到就搞定了塌西,前端還是費時間的他挎。

開始行動

定義model

既然表的字段不多,數(shù)據(jù)也不復(fù)雜雨让,那么我們可以先定義model雇盖。

image

內(nèi)容不難,熟悉sqlalchemy就更輕松了栖忠。目的是為了映射一個數(shù)據(jù)表(環(huán)境表)的類崔挖。

tablename 表示當前class對應(yīng)的數(shù)據(jù)庫表名,我們這里為了區(qū)分庵寞,統(tǒng)一加上pity_前綴狸相。
后面的內(nèi)容就是對字段的定義以及初始化類。

生成model

image

為了能自動生成數(shù)據(jù)表捐川,我們需要在dao/init.py里面import這個model類脓鹃。

定義Pydantic的schema

image

這一步的目的很簡單,就是為了做參數(shù)校驗古沥,比如有的哥們很壞瘸右,他創(chuàng)建環(huán)境的時候,直接給你來個空字符串或者空格字符串的環(huán)境名岩齿,所以遇到這樣的人太颤,我們要鄙視他,在數(shù)據(jù)插入數(shù)據(jù)庫之前就檢測到盹沈,并給他沉重打擊龄章。這里熟悉pydantic的同學,都了解乞封,不熟悉的話建議去閱讀以下Pydantic的官方文檔做裙,或者照著抄就是了。

大體意思就是定義了一個Environment的表單肃晚,里面有3個參數(shù): id锚贱、name、remarks关串,對應(yīng)的就是id拧廊,環(huán)境名和備注杂穷。其中name不能為空,備注隨便你卦绣,寫不寫都行,id你也可以不傳飞蚓,不傳就默認為None滤港。

編寫Dao層(與db交互的核心內(nèi)容)

  • 新增環(huán)境
image

由于環(huán)境也算配置里面的一套內(nèi)容,后續(xù)要和全局變量放到一起趴拧,所以我們給他歸檔到config目錄下溅漾。

來看看這個新增環(huán)境的功能都做了啥。

首先固定搭配著榴,這個dddd(懂的都懂)添履。從數(shù)據(jù)庫拿到一個session,類似于db.cursor()也類似于jdbc里面的getConnection脑又。

with Session() as session:

接著暮胧,根據(jù)我們的業(yè)務(wù)邏輯,雖然咱們數(shù)據(jù)庫設(shè)置name為unique问麸,我們還是先查詢是否有這個name并且deleted_at=None(刪除時間=None 代表未被刪除的)的環(huán)境數(shù)據(jù)往衷,如果有的話,我們不繼續(xù)新增了严卖,返回一個提示信息就行席舍。

否則呢,我們就把數(shù)據(jù)插到數(shù)據(jù)庫并用session進行提交哮笆。如果中途發(fā)生異常来颤,我們就該記錄日志的記錄日志,該返回錯誤的返回錯誤稠肘。如果沒啥問題就返回None福铅,代表大吉大利,相安無事启具。

  • 編輯環(huán)境
image

套路都是一樣的本讥,甚至代碼也很接近。但是注意到有個區(qū)別鲁冯,這里調(diào)用了update_model方法拷沸,這個方法是干啥的哩?

我們知道薯演,更新一條數(shù)據(jù)撞芍,我們除了需要更改的字段以外,還得有更新人和更新時間這2個字段跟著修改跨扮。所以我們編寫了一套通用的方法序无,把你傳入的data數(shù)據(jù)验毡,改到query里面,順便改寫一下更新時間和更新人帝嗡。

image

not_null指的是晶通,只更新非空字段,比如我本來有個數(shù)據(jù)是abc哟玷,你傳None進來狮辽,我給他改成None了,這樣可能會有誤會巢寡。這里借鑒了gorm喉脖,只更新非null的字段。dist代表目標抑月,source代表數(shù)據(jù)源树叽。

  • 刪除環(huán)境
image

其實刪除環(huán)境,我們這里做的是軟刪除谦絮,所以其實它還是一個update的操作题诵。我們通過id找到對應(yīng)的數(shù)據(jù),把它的deleted_at改成當前時間即可挨稿,順便改一下更新人(留下罪證)仇轻。

  • 查詢環(huán)境
image

注意,我這兒用的是list_env名稱奶甘,為啥不是search呢篷店?這里隨你的便,我其實是把list和search合體了一下臭家∑I拢可以看到我的name參數(shù),如果不是None的時候钉赁,它就是個search動作蹄殃,否則它是一個list操作。

search的根本條件是你踩,deleted_at == None诅岩,也就是說不管怎么樣,咱們都得保證數(shù)據(jù)沒被刪除带膜。

if name:
    search.append(Environment.name.ilike("%{}%".format(name)))

如果name有傳吩谦,或者不為""也不為None蚪黑,那么我們加上對name的模糊查詢勺鸦,等價于where name ilike xxxxx

最后就是自動分頁了华弓,我們查出來的數(shù)據(jù)很多的話芭挽,不可能全部做展示滑废,所以我們需要進行分頁蝗肪。page和size指的就是當前頁碼一頁多少條數(shù)據(jù)

最后咱們通過created_at進行倒序排列蠕趁,也就是說最新創(chuàng)建的在最前面薛闪。返回一個total,就是本次查詢查到了多少條數(shù)據(jù)俺陋,以便于前端進行展示逛绵。

編寫router

image

router層很簡單,通過ApiRouter新建路由倔韭,并把list/insert/update/delete方法注冊到路由∑岸裕可以看到基本上代碼量很少寿酌,屬于調(diào)用dao層的核心方法,根據(jù)返回結(jié)果來返回http response硕蛹。

image

值得注意的是醇疼,我沒有用restful api去寫接口,所以udpate/insert都是post請求法焰,其他是get請求秧荆。(未出現(xiàn)put delete)

注冊router

image

最后把剛才編寫的router注冊到app(pity)就可以了。

劇透下效果:

image

本期內(nèi)容就到這里了埃仪,不水文雖然少點樂趣乙濒,但是hin充實呀!下一期以前端怎么curd為主卵蛉,各位觀眾姥爺颁股,拜了個拜!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末傻丝,一起剝皮案震驚了整個濱河市甘有,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌葡缰,老刑警劉巖亏掀,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異泛释,居然都是意外死亡滤愕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門胁澳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來该互,“玉大人,你說我怎么就攤上這事韭畸∮钪牵” “怎么了蔓搞?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長随橘。 經(jīng)常有香客問我喂分,道長,這世上最難降的妖魔是什么机蔗? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任蒲祈,我火速辦了婚禮,結(jié)果婚禮上萝嘁,老公的妹妹穿的比我還像新娘梆掸。我一直安慰自己,他們只是感情好牙言,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布酸钦。 她就那樣靜靜地躺著,像睡著了一般咱枉。 火紅的嫁衣襯著肌膚如雪卑硫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天蚕断,我揣著相機與錄音欢伏,去河邊找鬼。 笑死亿乳,一個胖子當著我的面吹牛硝拧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播葛假,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼河爹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了桐款?” 一聲冷哼從身側(cè)響起咸这,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎魔眨,沒想到半個月后媳维,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡遏暴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年侄刽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朋凉。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡州丹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情墓毒,我是刑警寧澤吓揪,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站所计,受9級特大地震影響柠辞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜主胧,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一叭首、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧踪栋,春花似錦焙格、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至损肛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間荣瑟,已是汗流浹背治拿。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留笆焰,地道東北人劫谅。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像嚷掠,于是被迫代替她去往敵國和親捏检。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

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