1.flask自带的转换器
@app.route("/goods/<int:goods_id>")
def goods_detail(goods_id):
return "goods detail %s" % goods_id
@app.route("/user/<int:id>")
def hello_itcast(id):
return "hello itcast %d"%id
#转换器:int接受整数;float同int,但是接受浮点数;path默认的相似,但也接受斜线;
@app.route("/foods/<ddd>") #不加转换器类型,默认是普通字符串规则(除了/的字符)
def foods(ddd):
return "food page %s"%ddd
2.定义自己的转换器
用类的方式定义。
from werkzeug.routing import BaseConverter
#1.自定义转换器
class RegexConverter(BasseConverter): #继承
''''''
#pass
def __init__(self,url_map): #万能的转换器,url_map路由映射列表
#调用父类的初始方法
super(RegexConverter,self).__init__(url_map)
#将正则表达式的参数保存在对象的属性中,flask会去使用这个属性来进行路由的正则匹配
self.regex = regex #正则表达式
#2.将自定义的转换器,添加到flask的应用中。app.url_map.converters是一个字典
#app.url_map.converters["re"] = RegexConverter
#定义后以键值对的方式保存,并不是RegexConverter()的!没加括号,代表把类直接存进去了
'''
#172.0.0.1:5000/send/18677273487 #手机号
@app.route("/send/<()>")
def send_sms(mobile):
return "send sms to %s"%mobile
'''
#172.0.0.1:5000/send/1867727348
@app.route("/send/<re:mobile>")
def send_sms(mobile):
return "send sms to %s"%mobile
#172.0.0.1:5000/send/1867727348
@app.route("/send/<re(r'1[34578]\d{9}'):mobile>") #括号可以传参
def send_sms(mobile):
return "send sms to %s"%mobile
效果: