flask框架路由url轉換器用法
阿新 • • 發佈:2018-11-27
app.route('url')中支援string,int,float,path等型別,隱形支援正則。
實現flask支援正則的步驟
1 定義正則類,繼承BaseConverter
from werkzeug.routing import BaseConverter
class ReConverter(BaseConverter):
def __init__(self,url_map,*args):
super().__init__(url_map)
self.regex = args[0]
2 把正則類賦值給我們定義的正則規則
app.url_map.converters["re"] = ReConverter
3 在路由中使用正則
@app.route("/<re('\d{4}'):id>")
def index(id):
return "hello id=%s" %id
補充:
在定義轉換器類時,我們通常還遇到兩種方法:to_python,to_url
舉例程式碼如下:
from flask import Flask, url_for from werkzeug.routing import BaseConverter app = Flask(__name__) class ReConverter(BaseConverter): def __init__(self,url_map,*args): print("呼叫__init__") super().__init__(url_map) self.regex = args[0] def to_python(self, value): # 正則提取到的數字一般並不是就直接交給檢視函式處理,而是交給to_python,進過to_python處理 print(u"呼叫to_python value=%s"%value) return "4564" def to_url(self, value): # 反向解析先呼叫該函式 print(u"呼叫to_url value=%s"%value) return value app.url_map.converters["re"] = ReConverter @app.route("/<re('\d{4}'):id>") def index(id): return "hello id=%s" %id @app.route("/") def url(): return '<a href="%s">連結</a>' % url_for('index',id="1234") if __name__ == '__main__': app.run(port=5003)
當我們呼叫to_python時,函式執行的是首先裝飾器正則匹配提取出id ,然後id當成value傳給to_python ,經to_python處理交給檢視函式
當我們通過反向解析傳遞函式時,首先url_for 傳遞給函式to_url,to_url函式對傳入value值進行處理交給裝飾器,然後重複to_python步驟。