【python】通过数据库进行fastapi swaggerUI的下拉选项配置

今天对工作中对外提供的接口服务做了下优化,进行一下大概的分享。

一、enum介绍

enum模块定义了一个提供迭和比较功能的枚举类型;
可以用这个模块为值创建明确定义的符号,而不是使用字面量整数或字符串。

1.1通过继承enum.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

1.2通过enum.Enum()创建枚举类

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

二、fastapi下拉选项配置

2.1 利用1.2来实现枚举类的创建

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()

2.2 结合fastapi使用示例

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'

你可能感兴趣的:(Python,fastapi,python)