1.路由
路由就是根據請求方式和url确定由哪個視圖函數進行處理,不像Django通過路由清單,Flask是通過裝飾器的方式
@app.route()
指定視圖函數以及支援的請求方式,該方法可以傳入url和methods
from flask import Flask
app = Flask(__name__)
@app.route(rule="/index", methods=["get", "post"]) # 指定路徑,支援的請求方式(可使用預設的)
def index():
return "index"
if __name__ == '__main__':
print(app.url_map) # 列印所有的路由規則
app.run(debug=True)
app.route()方法主要有兩個參數,rule 是必須以“ / ”開頭的路徑,methods 是一個list或tuple,限定支援的請求方式
另外,可以通過
app.url_map
屬性擷取所有的路由規則
2.路徑傳參
傳參的方式有多種,比如說請求頭、表單、非表單等、查詢字元串等,當然還有路徑傳參,如果遇到路徑傳參,我們就需要把它提取出來
格式是:
/xx/<路由變量>
from flask import Flask
app = Flask(__name__)
@app.route(rule="/user_id/<uid>") # 用<>指定路徑變量名為uid
def index(uid):
return uid
if __name__ == '__main__':
app.run(debug=True)
2.1 路由轉換器
直接使用<>指定的變量是str類型的,如果需要特定的類型,可以使用類型轉換器。
其實每個類型轉換器都是一個類,繼承于BaseConverter類,該類位置是werkzeug.routing.BaseConverter
以下是預設的類型轉換器,位于werkzeug.routing的DEFAULT_CONVERTERS清單中
DEFAULT_CONVERTERS = {
"default": UnicodeConverter,
"string": UnicodeConverter,
"any": AnyConverter,
"path": PathConverter,
"int": IntegerConverter,
"float": FloatConverter,
"uuid": UUIDConverter,
}
比如說,我們需要把路徑參數轉換成一個int類型
from flask import Flask
app = Flask(__name__)
@app.route(rule="/user_id/<int:uid>") # 将參數uid轉換成int類型
def index(uid):
print(type(uid))
return str(uid)
if __name__ == '__main__':
app.run(debug=True)
2.2 自定義路由轉換器
因為已有的轉換器不能滿足我們的需求,比如說,想要一個手機号或郵箱類型的轉換器,我們就得自己寫一個了。思路很簡單,就是繼承
BaseConverter
這個類,然後重寫
regex
屬性實作正則比對,再把自定義的類添加到
app.url_map.converters
這個字典裡即可
from flask import Flask
from werkzeug.routing import BaseConverter
app = Flask(__name__)
# 自定義類型轉換器
class MobileConverter(BaseConverter):
regex = "1[3-9]\d{9}$" # 比對規則,不要以^開頭
app.url_map.converters["mobile"] = MobileConverter # 添加到轉換器清單
@app.route(rule="/user/<mobile:mobile>") # 将參數uid轉換成mobile類型
def index(mobile):
print(type(mobile))
return str(mobile)
if __name__ == '__main__':
app.run(debug=True)