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)