測(cè)試平臺(tái)系列(20) 編寫項(xiàng)目的增刪改查接口和頁面(2)

回顧

上回說到最楷,編寫項(xiàng)目權(quán)限相關(guān)接口,但是我們只完成了核心方法的編寫铲敛,這次我們就來定義相關(guān)的接口褐澎。

編寫接口

先實(shí)現(xiàn)項(xiàng)目的查詢和新增接口,接著實(shí)現(xiàn)項(xiàng)目角色的添加接口伐蒋。

編寫app/controllers/project/project.py

from flask import Blueprint, request, jsonify

from app import pity
from app.dao.project.ProjectDao import ProjectDao
from app.handler.fatcory import ResponseFactory
from app.handler.page import PageHandler
from app.utils.decorator import permission

pr = Blueprint("project", __name__, url_prefix="/project")


@pr.route("/list")
@permission()
def list_project(user_info):
    """
    獲取項(xiàng)目列表
    :param user_info:
    :return:
    """
    page, size = PageHandler.page()
    user_role, user_id = user_info["role"], user_info["id"]
    name = request.args.get("name")
    result, total, err = ProjectDao.list_project(user_id, user_role, page, size, name)
    if err is not None:
        return jsonify(dict(code=110, data=result, msg=err))
    return jsonify(dict(code=0, data=ResponseFactory.model_to_list(result), msg="操作成功"))


@pr.route("/insert", methods=["POST"])
@permission(pity.config.get("MANAGER"))
def insert_project(user_info):
    try:
        user_id = user_info["id"]
        data = request.get_json()
        if not data.get("name") or not data.get("owner"):
            return jsonify(dict(code=101, msg="項(xiàng)目名稱/項(xiàng)目負(fù)責(zé)人不能為空"))
        private = data.get("private", False)
        err = ProjectDao.add_project(data.get("name"), data.get("owner"), user_id, private)
        if err is not None:
            return jsonify(dict(code=110, msg=err))
        return jsonify(dict(code=0, msg="操作成功"))
    except Exception as e:
        return jsonify(dict(code=111, msg=str(e)))

這邊基本上很簡(jiǎn)單乱凿,流程就是 獲取參數(shù)->校驗(yàn)參數(shù)->調(diào)用方法,獲取返回結(jié)果咽弦,成功失敗返回不同的response.

注意到代碼里面有一處bug:

搜索項(xiàng)目時(shí), 這里返回的應(yīng)該是一個(gè)數(shù)組而不是0
  • 把藍(lán)圖加入run.py
image

測(cè)試一下

這里我們先調(diào)用了登錄接口拿到了token:

image
發(fā)現(xiàn)報(bào)錯(cuò)了

仔細(xì)查看原因徒蟆,發(fā)現(xiàn)是這里出了問題:

這個(gè)方法應(yīng)該有2個(gè)返回值,是自己疏忽了

可以看到在用Python寫多個(gè)返回值的時(shí)候型型,一定要記得返回多少就用多少段审,不然IDE并不會(huì)給出提示。這也是Python的一個(gè)小缺點(diǎn)吧闹蒜,當(dāng)然它也可以指定返回類型寺枉,只不過我覺得復(fù)雜了。

做出這樣的改動(dòng)就可以了

由于err是我們預(yù)期的err绷落,并且我們有做try/except處理姥闪,所以我們直接raise,拋出異常即可砌烁。

  • 再次嘗試
注意測(cè)試的接口是帶有token信息的哦

測(cè)試添加項(xiàng)目接口

除了token以外我們需要3個(gè)數(shù)據(jù): 項(xiàng)目名字筐喳、項(xiàng)目管理員、項(xiàng)目權(quán)限函喉。

這邊我直接偷懶避归,去數(shù)據(jù)庫查看有哪些用戶:

image

可以看到user_id從1到4都有,我這邊選4(李逍遙)當(dāng)做我這個(gè)測(cè)試項(xiàng)目的owner管呵。

image

可以看到?jīng)]有創(chuàng)建成功梳毙,提示我權(quán)限不足

還記得之前設(shè)定好的權(quán)限系統(tǒng)嗎捐下?因?yàn)槲野堰@個(gè)接口的權(quán)限設(shè)置為manager也就是經(jīng)理才能創(chuàng)建項(xiàng)目账锹。所以在我們還沒有完成用戶管理頁面的時(shí)候,我們先在數(shù)據(jù)庫軟件或用sql去手動(dòng)修改:

把role改為2 即超級(jí)管理員

接著我們需要重新登錄坷襟,獲取新token奸柬。

可能有的讀者發(fā)現(xiàn)一個(gè)問題,這樣如果改動(dòng)了用戶的權(quán)限啤握,用戶還需要重新登錄鸟缕,為什么不能在解析用戶信息的時(shí)候,重新獲取一遍用戶信息呢?這是一個(gè)很好的問題懂从,問就是兩者都可以呀授段,都沒毛病的。你甚至可以把用戶信息緩存到redis番甩,不用每次都讀db侵贵。

  • 重新測(cè)試
role變成2了
現(xiàn)在提示項(xiàng)目已存在
image

可以看到我們的代碼寫的太隨意,導(dǎo)致if寫錯(cuò)了缘薛,修正如下:

image
  • 重啟服務(wù)后測(cè)試
image
image

又報(bào)錯(cuò)了窍育,commit是一個(gè)不接受參數(shù)的方法,所以我們直接去掉宴胧。而且還有一個(gè)問題漱抓,就是返回值我是復(fù)制的上一個(gè)方法的,導(dǎo)致多了2個(gè)0恕齐。我們一并處理掉:

image
  • 再次測(cè)試
成功
  • 通過project/list接口去查看
也成功

所以我們編寫代碼需要仔細(xì)一點(diǎn)乞娄,就算是復(fù)制/粘貼也要更細(xì)心,不能像筆者一樣馬虎显歧!

后續(xù)測(cè)試

其實(shí)我們這邊的接口是分不同場(chǎng)景的仪或,不同的角色需要不同的測(cè)試場(chǎng)景,我們這邊設(shè)計(jì)用例的時(shí)候還需要考慮普通用戶的項(xiàng)目權(quán)限問題士骤,這些就留給讀者課后去測(cè)試了范删。


今天的內(nèi)容就到這里了,只寫了2個(gè)接口拷肌,下一篇開始繼續(xù)回到前端到旦,寫相關(guān)的頁面!如果覺得每篇篇幅較短的話廓块,可以給我提建議厢绝,我爭(zhēng)取滿足大家~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市带猴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌懈万,老刑警劉巖拴清,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異会通,居然都是意外死亡口予,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門涕侈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沪停,“玉大人,你說我怎么就攤上這事∧菊牛” “怎么了众辨?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長舷礼。 經(jīng)常有香客問我鹃彻,道長,這世上最難降的妖魔是什么妻献? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任蛛株,我火速辦了婚禮,結(jié)果婚禮上育拨,老公的妹妹穿的比我還像新娘谨履。我一直安慰自己,他們只是感情好熬丧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布屉符。 她就那樣靜靜地躺著,像睡著了一般锹引。 火紅的嫁衣襯著肌膚如雪矗钟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天嫌变,我揣著相機(jī)與錄音吨艇,去河邊找鬼。 笑死腾啥,一個(gè)胖子當(dāng)著我的面吹牛东涡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播倘待,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼疮跑,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了凸舵?” 一聲冷哼從身側(cè)響起祖娘,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎啊奄,沒想到半個(gè)月后渐苏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡菇夸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年琼富,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庄新。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鞠眉,死狀恐怖薯鼠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情械蹋,我是刑警寧澤出皇,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站朝蜘,受9級(jí)特大地震影響恶迈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谱醇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一暇仲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧副渴,春花似錦奈附、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至佑颇,卻和暖如春草娜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背茬贵。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國打工解藻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留螟左,地道東北人戳粒。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓蔚约,卻偏偏與公主長得像涂籽,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子树枫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

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