如何灵活运用Python枚举类来实现设计状态码信息
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,如何灵活运用Python枚举类来实现设计状态码信息,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在 web 项目中,我们经常使用自定义状
千家信息网最后更新 2025年01月20日如何灵活运用Python枚举类来实现设计状态码信息
如何灵活运用Python枚举类来实现设计状态码信息,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
在 web
项目中,我们经常使用自定义状态码来告知请求方请求结果以及请求状态;在 Python
中该如何设计自定义的状态码信息呢?
普通类加字典设计状态码
#!/usr/bin/python3# -*- coding: utf-8 -*-# @Author: Hui# @Desc: { 项目响应码模块 }# @Date: 2021/09/22 23:37class RETCODE: OK = "0" ERROR = "-1" IMAGECODEERR = "4001" THROTTLINGERR = "4002" NECESSARYPARAMERR = "4003" err_msg = { RETCODE.OK : "成功", RETCODE.IMAGECODEERR : "图形验证码错误", RETCODE.THROTTLINGERR : "访问过于频繁", RETCODE.NECESSARYPARAMERR : "缺少必传参数",}
单独利用一个字典进行状态码信息对照,这样设计一旦状态码多了就不好对照,再使用过程中也没那么方便,简单试下组织一个成功的信息
data = { 'code': RETCODE.OK, 'errmsg': err_msg[RETCODE.OK]}
巧用枚举类设计状态码信息
利用枚举类就可以巧妙的设计状态码信息
枚举类的定义
#!/usr/bin/python3# -*- coding: utf-8 -*-# @Author: Hui# @Desc: { 项目枚举类模块 }# @Date: 2021/09/23 23:37from enum import Enumclass StatusCodeEnum(Enum): """状态码枚举类""" OK = (0, '成功') ERROR = (-1, '错误') SERVER_ERR = (500, '服务器异常')
普通的类继承 enum
模块中的 Enum
类就变成了枚举类。
枚举类的使用
在 ipython
中测试使用下
In [21]: ok = StatusCodeEnum.OKIn [22]: type(ok)Out[22]:In [23]: error = StatusCodeEnum.ERRORIn [24]: type(error)Out[24]: In [26]: ok.nameOut[26]: 'OK'In [27]: ok.valueOut[27]: (0, '成功')In [28]: error.nameOut[28]: 'ERROR'In [29]: error.valueOut[29]: (-1, '错误')
枚举类中的每一个属性都返回一个枚举对象,其中枚举对象有两个重要的属性 name
, value
name 枚举对象在枚举类中的属性名
value 则是枚举对象在枚举类中对应属性名的值
# StatusCodeEnum.OK -># name value# 'OK' (200, '成功')# StatusCodeEnum.ERROR -># name value# 'ERROR' (-1, '错误')
用枚举类组组织一个成功的响应信息
code = StatusCodeEnum.OK.value[0]errmsg = StatusCodeEnum.OK.value[1]data = { 'code': code, 'errmsg': errmsg}
咋一看虽然状态码信息一一对照了,也很简洁,但使用起来还是有点麻烦,还有一点就是
StatusCodeEnum.OK.value[0]
这样的语法不能立马见名知义。因此还需对枚举类进行封装
封装枚举类
#!/usr/bin/python3# -*- coding: utf-8 -*-# @Author: Hui# @Desc: { 项目枚举类模块 }# @Date: 2021/09/23 23:37from enum import Enumclass StatusCodeEnum(Enum): """状态码枚举类""" OK = (0, '成功') ERROR = (-1, '错误') SERVER_ERR = (500, '服务器异常') @property def code(self): """获取状态码""" return self.value[0] @property def errmsg(self): """获取状态码信息""" return self.value[1]
通过 @property
装饰器把类型的方法当属性使用,由于 枚举类.属性名 对应着不同的枚举对象就很好的把状态码和信息进行了封装。看看外部调用的结果
In [32]: StatusCodeEnum.OK.codeOut[32]: 0In [33]: StatusCodeEnum.OK.errmsgOut[33]: '成功'In [34]: StatusCodeEnum.ERROR.codeOut[34]: -1In [35]: StatusCodeEnum.ERROR.errmsgOut[35]: '错误'
具体 @property
装饰器的使用详解,可以移步到 Python中property的使用技巧
继续模拟组织响应数据
data = { 'code': StatusCodeEnum.OK.code, 'errmsg': StatusCodeEnum.OK.errmsg}
这下终于可以接受了。
状态码信息枚举类
分享一波我平时用的状态码信息枚举类,供大家参考参考。
#!/usr/bin/python3# -*- coding: utf-8 -*-# @Author: Hui# @Desc: { 项目枚举类模块 }# @Date: 2021/09/23 23:37from enum import Enumclass StatusCodeEnum(Enum): """状态码枚举类""" OK = (0, '成功') ERROR = (-1, '错误') SERVER_ERR = (500, '服务器异常') IMAGE_CODE_ERR = (4001, '图形验证码错误') THROTTLING_ERR = (4002, '访问过于频繁') NECESSARY_PARAM_ERR = (4003, '缺少必传参数') USER_ERR = (4004, '用户名错误') PWD_ERR = (4005, '密码错误') CPWD_ERR = (4006, '密码不一致') MOBILE_ERR = (4007, '手机号错误') SMS_CODE_ERR = (4008, '短信验证码有误') ALLOW_ERR = (4009, '未勾选协议') SESSION_ERR = (4010, '用户未登录') DB_ERR = (5000, '数据错误') EMAIL_ERR = (5001, '邮箱错误') TEL_ERR = (5002, '固定电话错误') NODATA_ERR = (5003, '无数据') NEW_PWD_ERR = (5004, '新密码错误') OPENID_ERR = (5005, '无效的openid') PARAM_ERR = (5006, '参数错误') STOCK_ERR = (5007, '库存不足') @property def code(self): """获取状态码""" return self.value[0] @property def errmsg(self): """获取状态码信息""" return self.value[1]
看完上述内容,你们掌握如何灵活运用Python枚举类来实现设计状态码信息的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
状态
错误
信息
成功
设计
属性
对象
模块
项目
utf-8
参数
数据
方法
服务器
封装
服务
验证
普通
频繁
内容
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
如何修改数据库的文件
服务器 性能监控
安徽今日互联网科技
计算机网络技术是热门专业
软件开发拼多多
roblox服务器怎么做
服务器ssd pcie
虚拟机架设ftp服务器
国家推网络安全建设
两会文件2021 网络安全
做兼职网软件开发
壆五笔软件开发
政府事业单位网络安全责任书
国家网信办网络安全局
福建使用软件开发创新服务
聊斋搜神录官方服务器
招工信息软件开发工程师
网络安全知识进课堂视频观看
软件开发 全是复制粘贴
数据库求关系模式的关键字
db2数据库实例查看
真机服务器迁移系统
东莞微商软件开发商家
如何修改数据库的文件
电信光纤玩联通服务器卡不卡
计算机网络技术职业方向
深圳达农互联网科技股份cio
正规专业的软件开发公司
上海上信服网络技术有限公司
不同功率的服务器电源可以并联吗