Flask路由设置

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}"
    
posted @   vetra  阅读(93)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示