一、通过url_map可以查看整个flask中的路由信息
app.url_map
打印信息
Map([<Rule '/login' (HEAD, POST, GET, OPTIONS) -> login>,
<Rule '/index' (HEAD, POST, GET, OPTIONS) -> inner>,
<Rule '/' (HEAD, GET, OPTIONS) -> hello_world>,
<Rule '/static/<filename>' (HEAD, GET, OPTIONS) -> static>,
<Rule '/user/<username>' (HEAD, GET, OPTIONS) -> user_name>])
注意:在flask中同一个视图函数中可以在其上面可以添加不同的路由信息
二、使用url_for函数可以通过函数的名字来找到视图对应的url(redirect中使用较多)
url_for('index') #index是首页下面的函数名字,注意:这个函数不能使用有嵌套函数的装饰器
三、在路由系统中有以下几种转化器(不加转换器类型,默认是普通字符串规则—注意:除了/的字符)
- int
- float
- 默认字符串
- path(自己定义转换器)
#注意: BaseConverter,定义转换器的时候必须继承转换器的父类
from werkzeug.routing import BaseConverter
#1、定义自己写的转换器
class RegexConverter(BaseConverter):
def __init__(self, url_map, regex)
#调用父类的初始化方法
super(RegexConverter, self).__init__(url_map)
#将正则表达式的参数保存到对象的属性中,flask会使用这个属性来进行路由的正则匹配
self.regex = regex
def to_python(self,value):
#可以进行相应的操作
return value #返回到并且替代mobile,value是在路径中进行正则表达式匹配的时候提取的参数
def to_url(self,value):
#当遇到了url = url_for('send_message', mobile='15115203567')时,这里的value为15115203567,但是我们可以在这里对其进行相关操作,改变value的值,重新发送url(请求)。
return value
#2、将自己定义的转换器添加到flask的应用中,re是自己取名的
app.url_map.converters['re'] =RegexConverter
#3、在路由系统中使用自己写的转换器
@app.route('/send/<re(r'1[34578]\{9}'):mobile>')
def send_message(mobile):
return 'send a message to %s' % mobile