5、自定义URL规则转换器

匿名 (未验证) 提交于 2019-12-03 00:04:02

自定义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:

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!