使用url_for()時,會自動調用轉換器的to_url()方法
阿新 • • 發佈:2019-05-15
ase 分享 alt 自動 edi rect self. deb def
視圖反推url,在動態url(轉換器)反推中的應用
# -*- coding: utf-8 -*- from flask import Flask, url_for, redirect from werkzeug.routing import BaseConverter app = Flask(__name__) # 轉換器 # 127.0.0.1:5000/goods/123 @app.route("/goods/<int:goods_id>") # @app.route("/goods/<goods_id>") # 不加轉換器類型, 默認是普通字符串規則(除了/的字符) def goods_detail(goods_id): """定義的視圖函數""" return "goods detail page %s" % goods_id # 1. 定義自己的轉換器 class MobileConverter(BaseConverter): def __init__(self, url_map): super(MobileConverter, self).__init__(url_map) self.regex = r‘1[34578]\d{9}‘ class RegexConverter(BaseConverter): """""" def __init__(self, url_map, regex): # 調用父類的初始化方法 super(RegexConverter, self).__init__(url_map) # 將正則表達式的參數保存到對象的屬性中,flask會去使用這個屬性來進行路由的正則匹配 self.regex = regex def to_python(self, value): """""" print("to_python方法被調用") # return "abc" # value是在路徑進行正則表達式匹配的時候提取的參數 return value def to_url(self, value): """使用url_for的方法的時候被調用""" print("to_url方法被調用") return "15811111111" # return value # 2. 將自定義的轉換器添加到flask的應用中 app.url_map.converters["re"] = RegexConverter app.url_map.converters["mobile"] = MobileConverter # 127.0.0.1:5000/send/18612345678 # @app.route("/send/<mobile:mobile_num>") @app.route("/send/<re(r‘1[34578]\d{9}‘):mobile_num>") def send_sms(mobile_num): return "send sms to %s" % mobile_num @app.route("/index") def index(): url = url_for("send_sms", mobile_num="18922222222") # /send/18922222222 return redirect(url) if __name__ == ‘__main__‘: # 通過url_map可以查看整個flask中的路由信息 print(app.url_map) # 啟動flask程序 app.run(debug=True)
訪問:http://127.0.0.1:5000/index
跳轉:http://127.0.0.1:5000/send/15811111111
修改to_url後
使用url_for()時,會自動調用轉換器的to_url()方法