Flask路由设置


1. 接收任意路由参数

# 路由可以接收不限定类型的路由参数,默认按/分割参数
@app.route(rule="/users//")
# 路由设置了路由参数,在被装饰的视图中必须声明同名的视图参数用于接收,否则报错
def index(num, cid):
    print(cid, type(cid))
    print(num, type(num)) # 
    return f"

cid={cid}, num={num}, flask!!!

" # 可以发现,上面的路由参数在视图接收以后,默认格式是字符串,即便url地址中写的数字, # 所以我们需要对路由参数的类型或者格式要进一步的约束

2. 接收限定类型参数

转换器名称 描述
string 默认类型,接受不带斜杠的任何文本
int 接受正整数
float 接受正浮点值
path 接收string但也接受斜线
uuid 接受UUID(通用唯一识别码)字符串 xxxx-xxxx-xxxxx-xxxxx
# 限定类型的路由参数
# 不仅可以转换参数的数据类型,还可以达到匹配的目的,匹配不上,则404
@app.route("/goods/")
def goods_list(cid):
    print(cid, type(cid))  # 
    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/")
    def sms(mobile):
        return f"mobile={mobile}"