自定義URL轉換器
阿新 • • 發佈:2018-12-09
定義自己的url轉換器:
1.實現一個類,繼承'BaseConverter' 2.在自己定義的類中,重寫'regex',也就是這個變數的表示式 3.將自定義的類,對映到'app.url_map.converters'上
需求一:一個url中,含有手機號碼的變數,必須限定這個變數的字串格式滿足手機號碼的格式
from flask import Flask from werkzeug.routing import BaseConverter app = Flask(__name__) class TelephoneConveter(BaseConverter): regex = r'1[85734]\d{9}' app.url_map.converters['tel'] = TelephoneConveter @app.route('/') def hello_world(): return 'Hello World!' @app.route('/user/<int:user_id>/') def user_profile(user_id): return '您輸入的user_id為:%s' % user_id @app.route('/telephone/<tel:my_tel>/') def my_tel(my_tel): return '您的手機號碼為:%s' % my_tel if __name__ == '__main__': app.run(debug=True)
需求二:解析或反轉URL
from flask import Flask,url_for from werkzeug.routing import BaseConverter app = Flask(__name__) class ListConverter(BaseConverter): def to_python(self, value): ''' 將url中的引數經過解析傳給檢視函式 ''' return value.split('+') def to_url(self, value): ''' 會將url反轉的url引數放到url中 ''' return '+'.join(value) app.url_map.converters['list'] = ListConverter @app.route('/') def hello_world(): print(url_for('posts',boards=['a','b'])) return 'Hello World!' @app.route('/posts/<list:boards>/') def posts(boards): return '您提交的板塊是:%s'% boards if __name__ == '__main__': app.run(debug=True)