flask 自定义url转换器

from flask import Flask,url_for
from werkzeug.routing import BaseConverter
app = Flask(__name__)
#converter 转换器的意思


@app.route('/')
def hello_world():
    return 'hello world'


@app.route('/user/<int:id>/')
def user_profile(id):
    return '你输入的用户id为:%s'%id


#实现一个需求:
#一个url中,含有手机号码的变量,必须限定这个变量的字符串格式必须满足手机号码的格式
class PhoneMatch(BaseConverter):
    '''
    自定义手机验证码格式
    '''
    regex = r'1[3-9][0-9]{9}'

app.url_map.converters['tel'] = PhoneMatch #把自定义的通过app.url_map.converters注册,然后才能使用


@app.route('/phone/<tel:my_telephone>/')
def phone(my_telephone):
    return '用户你的电话号码为:%s'%my_telephone


#现在要实现一个a板块和b板块的帖子的总量

#原始的写法
@app.route('/post/<boards>/')
def posts(boards):
    boards = boards.split('+')
    print(boards)
    return '你提交的板块:{}'.format(boards)


#如果是多个地方都要改变这样写,很麻烦

class ListConverter(BaseConverter):
    def to_python(self, value):#这个value就是boards传入的值
        return value.split('+')

    def to_url(self, value):#跟url_for连用的
        return "+".join(value) #列表的一个知识点:join
app.url_map.converters['list'] = ListConverter
@app.route(
'/book/<list:price>/') def books(price): print(price) return 'a书和b书的价格为:{price}'.format(price=price) @app.route('/index/') def index(): print('*'*120) print(url_for('books',price=["70","80"]))#to_url的用法 print('*'*120) return '网站首页' if __name__ == '__main__': app.run(debug=True)
-----------------------------------------------------------------------------------------------------------------------------------------

列表join的用法
a = ['1','2']

s = '+'.join(a)
#一个列表要用join方法拼成字符串必须,必须整个列表元素都是字符串才行
print(s)

 

posted @ 2018-09-17 18:53  python成长中  阅读(1148)  评论(0编辑  收藏  举报