今天对工作中对外提供的接口服务做了下优化,进行一下大概的分享。
enum模块定义了一个提供迭和比较功能的枚举类型;
可以用这个模块为值创建明确定义的符号,而不是使用字面量整数或字符串。
class ENV(enum.Enum):
ST = 'st'
UAT = 'uat'
PRD = 'prd'
# 解析这个类时,Enum的成员会被转为实例;每个实例对应有一个name属性和value属性;
print(f'ENV.DEV.name={ENV.DEV.name},ENV.DEV.value={ENV.DEV.value}') # ENV.DEV.name=DEV,ENV.DEV.value=dev
Enum的参数有歧义,names参数传的才是参数名和参数值,value传生成的类名
语法:
enum.Enum(value=‘class_name’,names=[(var1,value1),(var2,value2)…])
ENV = enum.Enum(value='SS',names=[('DEV','dev'),('ST','st'),('UAT','uat')])
print(ENV.mro()) # [, , ]
print(ENV.DEV.name) # DEV
print(ENV.DEV.value) # dev
class EnumParams():
configs = None
def getConfigs(self):
if not self.configs:
# 查数据库,获取所有Enum参数配置信息
self.configs = 获取到的参数配置信息
def getEnumPatams(self,param_key):
self.getConfigs()
# 从self.configs获取对应参数配置,转为List[Dict[str,str]]形式
casts = ...
return enum,Enum(value=param_key,names=casts)
PARAMS = EnumParams()
from fastapi import APIRouter,Query
from xxx import PARAMS
xxRoutor = APIRouter()
# 根据paramKey获取配置信息,生成枚举类
xxEnumParamKey = PARAMS.getEnumPatams('xxEnumParamKey')
@xxRoutor.get('/xxx')
def xxx(var:xxEnumParamKey = Query(xxEnumParamKey.PARAM1)):
return 'xxx'