Flask 正则路由匹配——转换器
发布日期:2021-11-02 02:26:45 浏览次数:21 分类:技术文章

本文共 1670 字,大约阅读时间需要 5 分钟。

给路由传参

有时我们需要将同一类 URL 映射到同一个视图函数处理,比如:使用同一个视图函数来显示不同用户的个人信息。

路由传递参数

@app.route('/user/
') #默认为str类型def user_info(user_id): return 'hello %s' % user_id # 用%是接收

路由传递的参数默认当做 string 处理,也可以指定参数的类型

路由传递参数指定类型

@app.route('/user/
') # 指定int类型def user_info(user_id): return 'hello %d' % user_id # 使用%d接收

这里指定int,尖括号中的内容是动态的,在此暂时可以理解为接受 int 类型的值,实际上 int 代表使用 IntegerConverter 去处理 url 传入的参数

flask自带的类型有
#: the default converter mapping for the map.DEFAULT_CONVERTERS = {
"default": UnicodeConverter, "string": UnicodeConverter, "any": AnyConverter, "path": PathConverter, "int": IntegerConverter, "float": FloatConverter, "uuid": UUIDConverter,}

自定义路由匹配——自动以转换器

在 web 开发中,可能会出现限制用户访问规则的场景,那么这个时候就需要用到正则匹配,根据自己的规则去限定请求参数再进行访问

具体实现步骤为:

  • 导入转换器基类:在 Flask 中,所有的路由的匹配规则都是使用转换器对象进行记录
from werkzeug.routing import BaseConverter
  • 自定义转换器:自定义类继承于转换器基类
class RegexConverter(BaseConverter):    regex = r"[0-9]{6}"  # 规则:6位数字
  • 添加转换器到默认的转换器字典中
# 将自定义转换器添加到转换器字典中,并指定转换器使用时名字为: reapp.url_map.converters['re'] = RegexConverter   # 此句很像是创建一个RegexConverter的实例对象但是后面不带括号
  • 使用自定义转换器实现自定义匹配规则
@app.route("/index/
")def index(uer_id): return "index %s" % uer_id

但是这种方式一个自定义转换器只能满足一个规则,所有肯定是不可行的


自定义带参路由匹配——带参转换器

定义代码如下:

class RegexConverter(BaseConverter):    def __init__(self, url_map, *args):        super(RegexConverter, self).__init__(url_map)        #BaseConverter.__init__(RegexConverter,url_map)  不喜欢用super的也可以这样写        # 将接受的第1个参数当作匹配规则进行保存        self.regex = args[0]#将自己定义的转换器添加到默认转换器列表中app.url_map.converters['re']=RegexConverter@app.route('/user/
') # 在此处re()括号内填匹配规则def index(user_id): return 'index %s' % user_id

转载地址:https://blog.csdn.net/weixin_43250623/article/details/90668897 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Jinja2模板与模板继承
下一篇:Flask的状态保持和上下文管理

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月08日 01时05分14秒