靈活運(yùn)用Python 枚舉類來(lái)實(shí)現(xiàn)設(shè)計(jì)狀態(tài)碼信息
引言
在 web 項(xiàng)目中,我們經(jīng)常使用自定義狀態(tài)碼來(lái)告知請(qǐng)求方請(qǐng)求結(jié)果以及請(qǐng)求狀態(tài);在 Python 中該如何設(shè)計(jì)自定義的狀態(tài)碼信息呢?
普通類加字典設(shè)計(jì)狀態(tài)碼
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Author: Hui
# @Desc: { 項(xiàng)目響應(yīng)碼模塊 }
# @Date: 2021/09/22 23:37
class RETCODE:
OK = "0"
ERROR = "-1"
IMAGECODEERR = "4001"
THROTTLINGERR = "4002"
NECESSARYPARAMERR = "4003"
err_msg = {
RETCODE.OK : "成功",
RETCODE.IMAGECODEERR : "圖形驗(yàn)證碼錯(cuò)誤",
RETCODE.THROTTLINGERR : "訪問(wèn)過(guò)于頻繁",
RETCODE.NECESSARYPARAMERR : "缺少必傳參數(shù)",
}
單獨(dú)利用一個(gè)字典進(jìn)行狀態(tài)碼信息對(duì)照,這樣設(shè)計(jì)一旦狀態(tài)碼多了就不好對(duì)照,再使用過(guò)程中也沒(méi)那么方便,簡(jiǎn)單試下組織一個(gè)成功的信息
data = {
'code': RETCODE.OK,
'errmsg': err_msg[RETCODE.OK]
}
巧用枚舉類設(shè)計(jì)狀態(tài)碼信息
利用枚舉類就可以巧妙的設(shè)計(jì)狀態(tài)碼信息
枚舉類的定義
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Author: Hui
# @Desc: { 項(xiàng)目枚舉類模塊 }
# @Date: 2021/09/23 23:37
from enum import Enum
class StatusCodeEnum(Enum):
"""狀態(tài)碼枚舉類"""
OK = (0, '成功')
ERROR = (-1, '錯(cuò)誤')
SERVER_ERR = (500, '服務(wù)器異常')
普通的類繼承 enum 模塊中的 Enum 類就變成了枚舉類。
枚舉類的使用
在 ipython 中測(cè)試使用下
In [21]: ok = StatusCodeEnum.OK In [22]: type(ok) Out[22]: <enum 'StatusCodeEnum'> In [23]: error = StatusCodeEnum.ERROR In [24]: type(error) Out[24]: <enum 'StatusCodeEnum'> In [26]: ok.name Out[26]: 'OK' In [27]: ok.value Out[27]: (0, '成功') In [28]: error.name Out[28]: 'ERROR' In [29]: error.value Out[29]: (-1, '錯(cuò)誤')
枚舉類中的每一個(gè)屬性都返回一個(gè)枚舉對(duì)象,其中枚舉對(duì)象有兩個(gè)重要的屬性 name, value
- name 枚舉對(duì)象在枚舉類中的屬性名
- value 則是枚舉對(duì)象在枚舉類中對(duì)應(yīng)屬性名的值
# StatusCodeEnum.OK -> # name value # 'OK' (200, '成功') # StatusCodeEnum.ERROR -> # name value # 'ERROR' (-1, '錯(cuò)誤')
用枚舉類組組織一個(gè)成功的響應(yīng)信息
code = StatusCodeEnum.OK.value[0]
errmsg = StatusCodeEnum.OK.value[1]
data = {
'code': code,
'errmsg': errmsg
}
咋一看雖然狀態(tài)碼信息一一對(duì)照了,也很簡(jiǎn)潔,但使用起來(lái)還是有點(diǎn)麻煩,還有一點(diǎn)就是
StatusCodeEnum.OK.value[0] 這樣的語(yǔ)法不能立馬見(jiàn)名知義。因此還需對(duì)枚舉類進(jìn)行封裝
封裝枚舉類
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Author: Hui
# @Desc: { 項(xiàng)目枚舉類模塊 }
# @Date: 2021/09/23 23:37
from enum import Enum
class StatusCodeEnum(Enum):
"""狀態(tài)碼枚舉類"""
OK = (0, '成功')
ERROR = (-1, '錯(cuò)誤')
SERVER_ERR = (500, '服務(wù)器異常')
@property
def code(self):
"""獲取狀態(tài)碼"""
return self.value[0]
@property
def errmsg(self):
"""獲取狀態(tài)碼信息"""
return self.value[1]
通過(guò) @property 裝飾器把類型的方法當(dāng)屬性使用,由于 枚舉類.屬性名 對(duì)應(yīng)著不同的枚舉對(duì)象就很好的把狀態(tài)碼和信息進(jìn)行了封裝??纯赐獠空{(diào)用的結(jié)果
In [32]: StatusCodeEnum.OK.code Out[32]: 0 In [33]: StatusCodeEnum.OK.errmsg Out[33]: '成功' In [34]: StatusCodeEnum.ERROR.code Out[34]: -1 In [35]: StatusCodeEnum.ERROR.errmsg Out[35]: '錯(cuò)誤'
具體 @property 裝飾器的使用詳解,可以移步到 Python中property的使用技巧
繼續(xù)模擬組織響應(yīng)數(shù)據(jù)
data = {
'code': StatusCodeEnum.OK.code,
'errmsg': StatusCodeEnum.OK.errmsg
}
這下終于可以接受了。
狀態(tài)碼信息枚舉類
分享一波我平時(shí)用的狀態(tài)碼信息枚舉類,供大家參考參考。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Author: Hui
# @Desc: { 項(xiàng)目枚舉類模塊 }
# @Date: 2021/09/23 23:37
from enum import Enum
class StatusCodeEnum(Enum):
"""狀態(tài)碼枚舉類"""
OK = (0, '成功')
ERROR = (-1, '錯(cuò)誤')
SERVER_ERR = (500, '服務(wù)器異常')
IMAGE_CODE_ERR = (4001, '圖形驗(yàn)證碼錯(cuò)誤')
THROTTLING_ERR = (4002, '訪問(wèn)過(guò)于頻繁')
NECESSARY_PARAM_ERR = (4003, '缺少必傳參數(shù)')
USER_ERR = (4004, '用戶名錯(cuò)誤')
PWD_ERR = (4005, '密碼錯(cuò)誤')
CPWD_ERR = (4006, '密碼不一致')
MOBILE_ERR = (4007, '手機(jī)號(hào)錯(cuò)誤')
SMS_CODE_ERR = (4008, '短信驗(yàn)證碼有誤')
ALLOW_ERR = (4009, '未勾選協(xié)議')
SESSION_ERR = (4010, '用戶未登錄')
DB_ERR = (5000, '數(shù)據(jù)錯(cuò)誤')
EMAIL_ERR = (5001, '郵箱錯(cuò)誤')
TEL_ERR = (5002, '固定電話錯(cuò)誤')
NODATA_ERR = (5003, '無(wú)數(shù)據(jù)')
NEW_PWD_ERR = (5004, '新密碼錯(cuò)誤')
OPENID_ERR = (5005, '無(wú)效的openid')
PARAM_ERR = (5006, '參數(shù)錯(cuò)誤')
STOCK_ERR = (5007, '庫(kù)存不足')
@property
def code(self):
"""獲取狀態(tài)碼"""
return self.value[0]
@property
def errmsg(self):
"""獲取狀態(tài)碼信息"""
return self.value[1]
尾語(yǔ)
✍ 用 Code 譜寫(xiě)世界,讓生活更有趣。❤️
✍ 萬(wàn)水千山總是情,點(diǎn)贊再走行不行。❤️
✍ 碼字不易,還望各位大俠多多支持。❤️
到此這篇關(guān)于靈活運(yùn)用Python 枚舉類來(lái)實(shí)現(xiàn)設(shè)計(jì)狀態(tài)碼信息的文章就介紹到這了,更多相關(guān)Python 枚舉類 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)戰(zhàn)之用emoji表情生成文字
這篇文章主要介紹了python實(shí)戰(zhàn)之用emoji表情生成文字,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05
Python之dict(或?qū)ο?與json之間的互相轉(zhuǎn)化實(shí)例
今天小編就為大家分享一篇Python之dict(或?qū)ο?與json之間的互相轉(zhuǎn)化實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
Appium+python+unittest搭建UI自動(dòng)化框架的實(shí)現(xiàn)
本文主要介紹了Appium+python+unittest搭建UI自動(dòng)化框架的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-03-03
Python自動(dòng)化辦公之郵件發(fā)送全過(guò)程詳解
這篇文章主要介紹了Python自動(dòng)化辦公之郵件發(fā)送全過(guò)程詳解,使用Python實(shí)現(xiàn)自動(dòng)化郵件發(fā)送,可以讓你擺脫繁瑣的重復(fù)性業(yè)務(wù),可以節(jié)省非常多的時(shí),下面我們就來(lái)看看具體的操作配置吧2022-01-01
python對(duì)配置文件.ini進(jìn)行增刪改查操作的方法示例
.ini配置文件常被用作存儲(chǔ)程序中的一些參數(shù),通過(guò)它程序可以變得更加靈活。下面這篇文章主要給大家介紹了關(guān)于python對(duì)配置文件.ini進(jìn)行增刪改查操作的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-07-07
深入探究Flask的兩個(gè)高級(jí)特性之藍(lán)圖和JWT認(rèn)證
本文將探討 Flask 的兩個(gè)高級(jí)特性:藍(lán)圖(Blueprints)和 JSON Web Token(JWT)認(rèn)證,藍(lán)圖讓我們可以將應(yīng)用模塊化,以便更好地組織代碼;而 JWT 認(rèn)證是現(xiàn)代 Web 應(yīng)用中常見(jiàn)的一種安全機(jī)制,感興趣的小伙伴跟著小編一起來(lái)看看吧2023-08-08
Python常見(jiàn)庫(kù)matplotlib學(xué)習(xí)筆記之畫(huà)圖中各個(gè)模塊的含義及修改方法
matplotlib是python最著名的繪圖庫(kù),它提供了一整套和matlab相似的命令A(yù)PI,十分適合交互式地進(jìn)行制圖,下面這篇文章主要給大家介紹了關(guān)于Python常見(jiàn)庫(kù)matplotlib學(xué)習(xí)筆記之畫(huà)圖中各個(gè)模塊的含義及修改方法的相關(guān)資料,需要的朋友可以參考下2023-05-05
12個(gè)Pandas/NumPy中的加速函數(shù)使用總結(jié)
在本文中,數(shù)據(jù)和分析工程師?Kunal?Dhariwal?為我們介紹了?12?種?Numpy?和?Pandas?函數(shù),這些高效的函數(shù)會(huì)令數(shù)據(jù)分析更為容易、便捷2022-09-09

