1、自定义方法:
a 实现一个类,继承“BaseConverter
”
b 在自定义类中,重写‘regex
’,也就是这个变量的正则表达式;
c 将自定义类映射到“app.url_map.converters
”上。
举例:实现一个URL中,自定义手机号码格式
from werkzeug.routing import BaseConverter
Class TelephoneConverter(BaseConverter):
#第一位为1,第二位选一个数字,剩下9位任选数字
regex=r'1[85734]\d{9}
app.url_map.converters['tel']=TelephoneConverter
@app.route('/telephone/<tel:my_tel>/')
def my_tel(my_tel):
return '手机号码是: %s' % my_tel
2、两个方法:
to_python(self,value)
方法,该方法返回值,将会传递到view
视图函数中作为参数;to_url(self,values)
方法,返回值将会在调用url_for
函数的时候生成符合要求的url
形式
举例:+号隔开url名字
from flask import Flask,url_for
from werkzeug.routing import BaseConverter
app = Flask(__name__)
class ListConverter(BaseConverter):
def to_python(self, value):
return value.split('+')
def to_url(self, value):
return '+'.join(value)
app.url_map.converters['list']=ListConverter
@app.route('/')
def hello_world():
print(url_for('posts',boards=['a','b'])) # 打印出的结果是/posts/a+b/
return 'hello world'
@app.route('/posts/<list:boards>/')
def posts(boards):
print(boards) # 若传递的boards值为a+b,打印出的结果是['a','b']
return "提交的板块是: %s" % boards # 提交的板块是:['a','b']
if __name__ == '__main__':
app.run()