Flask中的路由系统设置(三)

一、通过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
发布了21 篇原创文章 · 获赞 0 · 访问量 133

猜你喜欢

转载自blog.csdn.net/qq_41706810/article/details/105737815