自定义URL转换器方式:
1.实现一个类,继承自BaseConverter
2.在自定义类中重写regex
,制定规则
3.将自定义的类,映射到app.url_map.converters
例如:
from flask import Flask, url_for from werkzeug.routing import BaseConverter class TelephoneConverter(BaseConverter): # 正则处表示第一位是1,第二位是中括号里的任意数字, # \d代表数字,9代表后续还有9位数字 regex = r'1[8573]\d{9}' app.url_map.converters['tel'] = TelephoneConverter @app.route('/telephone/<tel:m_tel>/') def my_tel(m_tel): return '您输入的手机号为:{}'.format(m_tel)
输出:
自定义类中的to_python()
class ListConverter(BaseConverter): # 使用list类型的参数,通过to_python()方法可以将返回值传到视图函数中 # 即对URL规则进行操作,然后返回到视图函数中呈现出来 # value参数对应url规则中传入的参数值,即a+b def to_python(self, value): # 返回url规则中参数值的分割值 return value.split('+') # return 'hello' app.url_map.converters['list'] = ListConverter @app.route('/posts/<list:boards>/') def posts(boards): return '您提交的板块为:{}'.format(boards)
输出1:
输出2:
自定义类中的to_url()方法
class ListConverter(BaseConverter): # 用在使用url_for函数返回URL规则时 # 使用to_url方法会将返回值传入URL规则内 # 即将返回值传入route装饰器中的URL规则中的参数部分 # value对应的是url反转函数中传入的参数 def to_url(self, value): return "+".join(value) # return 'hello' app.url_map.converters['list'] = ListConverter @app.route('/') def hello_world(): return url_for('posts', boards=['a', 'b'])
输出1:
输出2:
来源:51CTO
作者:传说中的赛亚极客
链接:https://blog.csdn.net/Xinya_Meng/article/details/100808654