自定义¶
自定义响应¶
通常情况下,pre-request 检查用户参数发现问题时,会直接中断处理并将发现的问题返回给请求方。pre-request提供的 默认JSON响应格式如下:
{
"respCode": 560,
"respMsg": "错误消息",
"result": {}
}
但是在显示场景中,每个人都需要特定的响应格式。所以pre-request提供了自定义响应的功能。您仅需要实现一个类继承自 BaseResponse
即可实现您自己的数据响应。
from flask import make_response
from pre_request import BaseResponse
class CusResponse(BaseResponse):
def __call__(self, fuzzy=False, formatter=None, error=None):
result = {
"code": error.code,
"rst": {}
}
return make_response(json.dumps(result))
当然,我们需要您在初始化您的项目的时候,设置一下 pre-request 使用您的自定义响应
from pre_request import pre
pre.add_response(CusResponse)
自定义格式化内容¶
如果您觉得自定义一个响应类过于复杂,我们也提供了更轻便的自定义格式化函数功能,pre-request 在尝试拼接响应内容的时候,会优先尝试调用您的 格式化函数生成响应字符串。
def custom_formatter(code, msg):
""" 自定义结果格式化函数
"""
return {
"code": code,
"msg": "hello",
"sss": "tt",
}
我们会尝试将错误码和格式化后的错误消息传递到函数中,根据我们提供的参数,您就可以返回一个特点的内容,返回给请求方
当然,我们也同样需要您设置pre-request使用您提供的格式化函数
from pre_request import pre
pre.add_formatter(custom_formatter)
自定义过滤器¶
pre-request 提供了丰富的过滤器插件。但是面对各式各样的业务需求,您可能也觉得pre-request无法满足您。因此pre-request 提供了自定义过滤器功能,让您可以更加自身的业务需求去扩展pre-request框架。
通常情况下,自定义的过滤器需要继承自 BaseFilter
类。
from pre_request import BaseFilter
class CustomFilter(BaseFilter):
def fmt_error_message(self, code):
if code == 10086:
return "对不起,这里是中国电信"
def filter_required(self):
""" 检查当前过滤式,是否必须要执行
"""
return True
def __call__(self, *args, **kwargs):
""" 自定义过滤器时需要实现的主要功能
"""
super(CustomFilter, self).__call__()
if self.rule.direct_type == int and self.key == "number" and self.value != 10086:
raise ParamsValueError(code=10086, filter=self)
return self.value + 1
如上所示,您至少需要实现`fmt_error_message`、filter_required 和 __call__ 方法。在运行您的过滤器之前,先调用 filter_required 方法判断当前过滤器是否需要被执行,然后再调用 __call__ 方法运行过滤器。当发现过滤失败后,会调用 fmt_error_message 来通知过滤器格式化错误消息。
最后,您需要在项目初始化时将自定义过滤器安装到pre-request中
from pre_request import pre
pre.add_filter(CustomFilter)
自定义参数存储¶
pre-request 在默认情况下会将格式化后的参数存储在 ~flask.g.params 中和当前函数的 params 参数中。如果在您的项目中 params 字段有特殊 含义的话,您也可以自定义存储的参数名称。
from pre_request import pre
# 指定存储参数的key
pre.store_key = "pre_params"