1. 接收任意路由参数
# 路由可以接收不限定类型的路由参数,默认按/分割参数
@app.route(rule="/users/<cid>/<num>")
# 路由设置了路由参数,在被装饰的视图中必须声明同名的视图参数用于接收,否则报错
def index(num, cid):
print(cid, type(cid))
print(num, type(num)) # <class 'str'>
return f"<h1>cid={cid}, num={num}, flask!!!</h1>"
# 可以发现,上面的路由参数在视图接收以后,默认格式是字符串,即便url地址中写的数字,
# 所以我们需要对路由参数的类型或者格式要进一步的约束
2. 接收限定类型参数
| 转换器名称 |
描述 |
| string |
默认类型,接受不带斜杠的任何文本 |
| int |
接受正整数 |
| float |
接受正浮点值 |
| path |
接收string但也接受斜线 |
| uuid |
接受UUID(通用唯一识别码)字符串 xxxx-xxxx-xxxxx-xxxxx |
# 限定类型的路由参数
# 不仅可以转换参数的数据类型,还可以达到匹配的目的,匹配不上,则404
@app.route("/goods/<int:cid>")
def goods_list(cid):
print(cid, type(cid)) # <class 'int'>
return f"cid={cid}"
3. 自定义路由参数转换器(正则匹配路由转换器)
- 1.导入转换器基类
from werkzeug.routing import BaseConverter
- 2.自定义转换器
class RegexConverter(BaseConverter):
def __init__(self, map, *args):
super().__init__(map)
# 正则参数
self.regex = args[0]
- 3.添加转换器到默认的转换器字典中,并指定转换器使用时名字为:re
app.url_map.converters['re'] = RegexConverter
- 4.使用转换器去实现自定义匹配规则(此处定义规则是:手机号码)
@app.route("/sms/<re('1[3-9]\d{9}'):mobile>")
def sms(mobile):
return f"mobile={mobile}"