自定义flask转换器
自定义flask转换器
以匹配手机号为例:
# 1. 定义自己的转换器 class MobileConverter(BaseConverter): def __init__(self, url_map): super(MobileConverter, self).__init__(url_map) self.regex = r'1[34578]\d{9}' class RegexConverter(BaseConverter): """""" def __init__(self, url_map, regex): # 调用父类的初始化方法 super(RegexConverter, self).__init__(url_map) # 将正则表达式的参数保存到对象的属性中,flask会去使用这个属性来进行路由的正则匹配 self.regex = regex def to_python(self, value): """""" print("to_python方法被调用") # return "abc" # value是在路径进行正则表达式匹配的时候提取的参数 return value def to_url(self, value): """使用url_for的方法的时候被调用""" print("to_url方法被调用") # return "15811111111" return value # 2. 将自定义的转换器添加到flask的应用中 app.url_map.converters["re"] = RegexConverter app.url_map.converters["mobile"] = MobileConverter # 127.0.0.1:5000/send/18612345678 # @app.route("/send/<mobile:mobile_num>") @app.route("/send/<re(r'1[34578]\d{9}'):mobile_num>") def send_sms(mobile_num): return "send sms to %s" % mobile_num
输出:
说明:
re为万能转换器,可以任意写正则
延伸:转换器的运行线路: