自定义URL转换的的步骤和使用
自定义URL转换to_python的使用
自定义转换器中to_url的使用
1. 自定义URL转换的的步骤和使用
from flask import Flask
from werkzeug.routing import BaseConverter
"""
自定义url转换器的步骤
转换器是一个类,必须继承自 werkzeug.routing.BaseConverer
1. 实现一个类,继承自 BaseConverter
2. 在自定义的类中,重写‘regex’,也就是这变量的正则表达式
3.将自定义的类,映射到‘app.url_map.converters’上,可理解为加入字典DEFAULT_CONVERTERS中
比如:app.url_map.converter['tel']=TelephoneConverter
"""
app = Flask(__name__)
# 需求:自定义转换器 希望路径中能匹配一个电话号码类型的参数
class TelephoneConverter(BaseConverter):
regex=r'1[3456789]\d{9}'
app.url_map.converters['tel']=TelephoneConverter
# 使用自定义转换器 实现需求
@app.route('/tel/<tel:num>/')
def my_tel(num):
return '{}'.format(num)
if __name__=='__main__':
app.run()
2.自定义URL转换to_python的使用
在转换器类中,实现to_python(self,value)方法,这个方法的返回值将会传递到view函数中作为参数
from flask import Flask
from werkzeug.routing import BaseConverter
app = Flask(__name__)
class Li(BaseConverter):
def to_python(self, value):
return value
app.url_map.converters['li']=Li
@app.route('/li/<li:num>/')
def my_tel(num):
return '{}'.format(num)
if __name__=='__main__':
app.run()
3.自定义转换器中to_url的使用
在转换器类中,实现to_url(self,value)方法,这个方法的返回值,将会调用url_for函数的时候生成符合要求的url形式
url_for函数是构建url
from flask import Flask,url_for
from werkzeug.routing import BaseConverter
app = Flask(__name__)
class Li(BaseConverter):
def to_python(self, value):
return value
def to_url(self, value):
return 'hello'
app.url_map.converters['li']=Li
@app.route('/li/<li:num>/')
def my_tel(num):
return '{}'.format(num)
@app.route('/hel/')
def hello():
args = url_for('my_tel',num='15851115701')
return '{}'.format(args)
if __name__=='__main__':
app.run()