Flask自定义正则路由方法

 1 # coding:utf-8
 2 from flask import Flask, current_app, redirect, url_for
 3 from werkzeug.routing import BaseConverter
 4 app = Flask(__name__)
 5 
 6 @app.route("/goods/<int:goods_id>")
 7 # @app.route("/goods/<goods_id>") 不加转换器类型,默认是普通字符串规则(除了/的字符)
 8 def goods_detail(goods_id):
 9     """定义视图的函数"""
10     return "good detail page %s" % goods_id
11 
12 
13 # 定义一个类,用werkzeug.routing的BaseConverter为父类,继承。
14 # 定义自己的转换器
15 class mobileConverter(BaseConverter):
16     def __init__(self, url_map):
17         super().__init__(url_map)
18         self.regex = r'1[34578]\d{9}'
19 
20 # class RegexConverter(BaseConverter):
21     # 创建一个对象,并找到regex正则表达式
22     #def __init__(self, url_map, regex):
23         #调用父类的初始化方法
24         #super().__init__(url_map)
25         # 将正则表达式的参数保存到对象属性中,flask会去使用这个属性来进行路由的正则匹配
26         #self.regex = regex
27 
28 # 将自定义的转换器添加到flask的应用中
29 # app.url_map.converters["re"] = RegexConverter
30 app.url_map.converters["mobile"]= mobileConverter
31 
32 # 正则表达式 re(r'正则内容')  <re>:
33 # @app.route("/send/<re(r'1[34578]\d{9}'):mobile>")
34 @app.route("/send/<mobile:mobile_num>")
35 def send_sms(mobile_num):
36     return "send to %s" % mobile_num
37 # def send_sms(mobile):
38     # return "send sms to %s" % mobile
39 
40 
41 
42 
43 if __name__ == '__main__':
44     print(app.url_map)
45     app.run(debug = True)

 

posted @ 2020-02-27 15:44  你似雾  阅读(581)  评论(0编辑  收藏  举报