1. 程式人生 > >flask框架路由url轉換器用法

flask框架路由url轉換器用法

 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步驟。