Flask以正则的方式匹配动态路由

在flask默认的路由匹配规则中,一个动态的路由可以匹配int,float,path三种类型
例如:

#匹配path的情况
@app.route('/user/<username>')
def user(username)
#匹配int的情况
@app.route('/user/<int:user_id>')
def user(user_id)
#匹配path的情况
@app.route('/user/<float:user_weight>')
def user(user_weighht)

而在某些特定的需求下,需要动态匹配一些有特殊要求的字符,这就可以考虑用正则表达式的方式传入

  • 首先,引入转换器相关依赖包
from werkzeug.routing import  BaseConverter
  • 然后,编写正则转化的类
class RegexConverter(BaseConverter):
    def __init__(self,url_map,*items):
        super(RegexConverter,self).__init__(url_map)
        self.regex=items[0]
  • 接下来,初始化转换器
app.url_map.converters['regex'] = RegexConverter
  • 最后,则可在视图函数中使用
# 匹配三位长度的字符串
app.route('/user/<regex("[a-z]{3}"):user_id>')
def user(user_id):
    return 'User is %s' % user_id
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flask中的动态路由是一种通过URL路径参数来传递参数的方式。与Django不同,Flask使用转换器语法来定义动态路由的参数类型。默认情况下,参数类型是字符串(string),但也可以指定其他类型,如整数(int)、浮点数(float)和路径(path)等。[1][2] 例如,可以使用`<int:user_id>`来定义一个接受整数类型参数的动态路由。在路由函数中,可以通过参数名来获取传递的参数值,并进行相应的处理。例如: ```python @app.route('/users/<int:user_id>') def user_info(user_id): print(type(user_id)) return 'hello user {}'.format(user_id) ``` 在这个例子中,当访问`/users/123`时,`user_id`参数将被解析为整数类型,并在函数中进行处理。[1] 除了单个参数,Flask还支持在动态路由中包含多个参数。可以通过在路由路径中使用斜杠来分隔不同的参数,并在路由函数中按照顺序接收这些参数。例如: ```python @app.route('/all/<path:path>/name/<string:name>/age/<int:age>/price/<float:price>') def show_all(name, path, age, price): return f"path is {path}\nname is {name}\nage is {age}\nprice is {price}" ``` 在这个例子中,路由路径`/all/somepath/name/someuser/age/25/price/9.99`将被解析为`path`、`name`、`age`和`price`四个参数,并在函数中进行处理。[3] 通过使用动态路由,可以根据不同的URL路径参数来实现不同的功能,使得Flask应用程序更加灵活和可扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值