动易学校网站系统,网站班级文化建设视频,怎么免费做网站教程,百度电脑版问题#xff1a;当参数为动态参数时#xff0c;Template替换无法进行二次处理
解决方案#xff1a;通过热加载来进行替换
热加载原理#xff1a;在代码运行的过程中动态的调用python中的方法达到获得动态参数
可以进行热加载的情况#xff1a;yaml文件#xff0c;随机…问题当参数为动态参数时Template替换无法进行二次处理
解决方案通过热加载来进行替换
热加载原理在代码运行的过程中动态的调用python中的方法达到获得动态参数
可以进行热加载的情况yaml文件随机数替换后的值进行计算加密等
示例
需要热加载的数据
yaml数据extract.yaml
token: 76_ZgYcDxWFgCCjZVj2EPfqj7QWW_k3-iUZq68Mr6hE_VvDDa_IAfjEIi7nQwMUoISer8MAspesP1JnP1iIziezVPcB4jqZs4z_3EQpVtkEVm0Z0L7VyTmQV7JC0gsTYGaAAAPUC
需要操作的数据
class DeBugTalk:#场景一读取yaml中的数据def read_yaml(self,key):with open(D:\study\pytest\extract.yaml, encodingutf-8) as f:value yaml.safe_load(f)return value[key]# 场景二数据计算def add(self,a,b):return str(int(a)int(b))# 场景三读取随机数def random(self):return str(random.randint(1, 10))
热加载方法
class ExtractUtil:def hotload_replace(self,data_str:str):# 1.定义一个正则匹配的通用表达式# regexp \\$\\{(.*?)\\} # 用于匹配格式为${access_token}regexp \\$\\{(.*?)\\((.*?)\\)\\} # 用于匹配格式为${函数名(参数)}fun_list re.findall(regexp,data_str)for f in fun_list:print(f)# ${函数名(参数)} 函数名f[0],参数为f[1]if f[1] : # 当f[1]没有参数为时value getattr(DeBugTalk(), f[0])() # 此时通过反射调用了random()和dm5()方法else: # 当f[1]有参数时value getattr(DeBugTalk(), f[0])(*f[1].split(,))# 如果value的值为字符串格式但是时数字为了看着清楚明白可以加一层处理if isinstance(value, str) and value.isdigit():value value print(value:%s % value, type(value)) # 注意这里的打印是在if同级不然不满足的数据无法打印# 拼接旧的值old_value ${f[0](f[1])}# 将旧的值替换成新的值data_str data_str.replace(old_value,str(new_value))return data_strif __name__ __main__:request_data {data1:${read_yaml(token)},data2:${add(1,2)},data3: ${random()}}data_str yaml.safe_dump(request_data)print(old_str:%s % data_str)data_str ExtractUtil().hotload_replace(data_str)print(new_str:%s % data_str)
打印结果