Flask自定义转换器,实现路由匹配正则表达式参数

Posted springionic

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask自定义转换器,实现路由匹配正则表达式参数相关的知识,希望对你有一定的参考价值。

Flask框架动态路由实现参数传递和Django框架有类似之处,但是相比于Django框架,Flask实现复杂的参数就需要自己自定义转换器来实现了,而不能向Django那样直接使用正则表达式

1 # 路由传递的参数默认当做string处理
2 # 这里指定int,尖括号中冒号后面的内容是动态的
3 
4 @app.route(/user/<int:id>)
5 def hello_itcast(id):
6     return hello itcast {}.format(id)

Flask默认的转换器有以下几种

  • int::接受整数
  • float:同int,但是接受浮点数
  • path:和默认的相似,但也接受斜线

让Flask向Django一样拥有一个正则表达式匹配参数的功能

 1 # 导入BasseConverter类,作为所有自定义转换器的父类
 2 from werkzeug.routing import BaseConverter
 3 
 4 
 5 # 定义自己的转换器,继承于BaseConvert类
 6 class RegexConverter(BaseConverter):
 7     def __init__(self, url_map, regex):
 8         # 调用父类的构造方法
 9         super().__init__(map=url_map)
10         # 将正则表达式的参数保存到对象的属性中,flask会去使用这个属性来进行路由的正则匹配
11         self.regex = regex
12 
13 # 将自定义的转换器添加到flask的应用中
14 app.url_map.converters[re] = RegexConverter
15 
16 # 然后就可以用了 re(r‘regex‘):mobile 的方式使用,如下
17 # 这里匹配的是一个十一位的数字
18 @app.route(/send/<re(r"\d{11}"):mobile>)
19 def send_message(mobile):
20     return send message to {}.format(mobile)

通过上述方法,Flask的路由传递参数也可以像Django框架那样灵活的使用正则表达式了

 

以上是关于Flask自定义转换器,实现路由匹配正则表达式参数的主要内容,如果未能解决你的问题,请参考以下文章

flask第十二篇——自定义url转换器

Flask 在其 URL 路由中是不是支持正则表达式?

3-flask 中的请求和响应

5_自定义url路由转换器

Flask自定义正则路由方法

路线要求中的自定义正则表达式