内置转换器:
default:不指定转换器情况下的默认转换器可写可不写
any:列出的元组中的任意一个,和枚举类似 例如:<any(admin,hsj):username>
int:接收int类型参数
string:接受字符串类型单数(参数中不能带/)
path:path转换器可以让路径参数中带有/,string不可以带/,否则访问失败
uuid:接收uuid类型参数
float:接收浮点型参数
自定义转换器:
当系统内置的转换器无法满足业务需求时,需要自己根据需要进行扩展
自定义转换器的编写:编写的自定义转换器类必须继承Baseconverter
例如:
from werkzeug.routing import BaseConverter
class PhoneConverter(BaseConverter):
regex = "1[3-9]\d{9}"
#将自定义的转换器注册到系统内置的转换器中
app.url_map.converter["Phone"] = PhoneConverter
自定义转换器的使用:使用注册自定义转换器时指定的key当作系统内置的转换器来使用即可
例如:
@app.router("/user/<phone:phone_num>")
def index(phone_num)
print("phone_num=",phone_num,",type=",type(phone_num))
return f"手机号:{phone_num}"
正则(万能)转换器的编写:
class RegexpConvert(BaseConverter):
def __init__(self, url_map, regexp)
super().__init__(url_map)
print("RegexpConvert.regexp=",regexp)
# 将外界传入的参数赋值给系统内置的转换器BaseConverter的属性regex
# 后续这个类内部会自动验证我们传入的正则表达式能否满足要求
self.regex = regexp
#将自定义的转换器注册到系统内置的转换器中
app.url_map.converter["re"] = RegexpConvert
正则转换器的使用:
使用注册自定义转换器时指定的key当作系统内置的转换器来使用,此时需要传参,格式为:<key(参数):content> 参数定义为自定义的正则表达式即可
例如:
@app.route("/user/<re(r'.*'):content>")
def index(content):
print("content=", content, "type=", type(centent))
return content