在flask restplus下統一介面返回格式

2021-10-07 18:35:45 字數 2440 閱讀 3628

在使用flask+flask-restplus時,業務正常時介面函式返回乙個可以json序列化的物件

@ns.route(

'/hello'

)class

hello

(resource)

:def

get(self)

:return

['hello'

,'hi'

]

介面返回內容如下:

[

"hello"

,"hi"

]

當業務異常(比如檢測到引數錯誤)時,一般呼叫abort函式,它會丟擲乙個httpexception

@ns.route(

'/error'

)class

error

(resource)

:def

get(self)

: abort(

400,

'params error'

)

介面返回內容如下:

由於公司規範要求,需要使用統一的http請求響應模板,如下:

因此,我們需要對介面返回格式進行改造。

為了不改變原有的編碼習慣,又能夠達到以上返回格式的要求,我們可以使用flask-restplus的representation裝飾器來註冊乙個介面返回內容處理器

@api.representation(

)def

output_json

(data, code, headers=

none):

result =

if api.specs_url == request.url:

result = data

elif code in

(200

,201

,204):

result[

'code']=

100000

result[

'data'

]= data

else

: result[

'code'

]= data.get(

'code')or

200000

result[

'message'

]= data[

'message'

] response = make_response(json.dumps(result)

, code)

response.headers.extend(headers or

)return response

現在再來請求上面的兩個介面,返回格式變成了我們想要的格式

如果丟擲不是httpexception的異常,會發現並不能得到具體的異常內容,只會得到以下結果:

如果想要將一些指定的異常內容返回,比如我們自定義了以下的異常類:

'許可權不足'那麼我們可以使用flask-restplus的errorhandler裝飾器來註冊乙個異常處理器,在這個處理器中將自定義異常轉換為正常介面返回格式

@api.errorhandler(baseexception)

defhandle_base_exception

(error)

:return error.to_dict(

), error.http_code

這樣自定義異常也可以返回異常內容了

當然我們也不能將所有異常一股腦丟擲,這樣做的話會將因程式不健壯導致的異常也丟擲,會給使用者帶來不好的體驗。

工作在壓力下

很幸運的我能夠到乙個世界五百強的公司去上班 雖然只是做乙個短短的三個月的inter 我依然為此興奮了好多天 經過了初期的新鮮和刺激之後 每日辛勞的工作開始折磨我疲憊的身體 凌晨一點鐘左右睡覺而早上要在六點半爬起來急急忙忙到學校門口去趕班車 身體變得越來越差 更讓我擔心的是 視力也越來越不好了 每晚回...

在72 下點亮

define io volatile typedef unsigned int uint32 t typedef io uint32 t vu32 typedef unsigned short int uint16 t define gpio pin 0 uint16 t 0x0001 000000...

在規則下程式設計

oj online judge 要求 正確處理輸入格式 正確處理輸出格式 輸入輸出均是標準輸入 輸出,不用考慮讀寫檔案。1.正確處理輸入格式 常見輸入格式 預先不輸入資料的組數 預先輸入資料的組數 只有一組輸入資料 應對 讀到檔案結尾 讀資料組數再迴圈 直接讀入資料。預先不輸入資料的組數 c whi...