配置handler¶
有时候还需要对保存的配置进行进一步处理,以获得最终需要的配置,因此引入了handler的概念。
保存配置时会把 v2_config
中的类型为dict且含有 _handler
这个key的那部分,经过handler处理后整个替换掉。
如果存在多层嵌套,会先处理最里层的数据。
如:
{
"url":{
"_handler":"v2_url_handler",
"type":"tag",
"value":"1"
}
}
经v2_url_handler处理后,变成:
// 注意这里替换的是与"_handler"同级的整个结构
{
"url" : "/tag/1"
}
自带handler¶
自带了3个handler,分别是 :
v2_url_handler :返回分类、标签的url
v2_img_handler : 返回生成图片标签所以的结构
v2_kv_handler : 把数组的k-v结构解析为字典结构
自定义handler¶
新建一个python包,以及py文件,
my_ex/
__init__.py
custom_handler.py
把你的py文件加入
settings_local.py
的CUSTOM_CONFIG_HANDLER
中
CUSTOM_CONFIG_HANDLER=['my_ex.custom_handler']
编写一个你的handler类,继承
app.deeru_config_handler.base.BaseHandler
,并重写calculate()
装饰器
deeru_config_handler()
用于定义handler的名字,防止冲突建议格式为:你的名字:handler名字
from app.deeru_config_handler.base import BaseHandler, deeru_config_handler
@deeru_config_handler('gojuukaze:textHandler')
class TextHandler(BaseHandler):
"""
args:
{
'_handler':'gojuukaze:textHandler',
'text':'xxx'
}
返回
{
'text':'xx',
}
"""
def calculate(self):
text = self.args['text']
return {
'text': text,
}
至此你已经成功编写了一个handler,载入handler需要重启工程
注解
函数 calculate()
并没有限制返回的数据类型,你可以返回字符串、字典等
要测试你写的handler,可以用 get_real_config()
函数
In [1]: from app.manager.config_manager_v2 import get_real_config
In [2]: get_real_config({'_handler':'gojuukaze:textHandler','text':'123'})
Out[2]: {'text': '123'}