【flask进阶学习笔记】1.自定义URL转换器

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()
发布了44 篇原创文章 · 获赞 5 · 访问量 4491

猜你喜欢

转载自blog.csdn.net/ljb0077/article/details/99707358