【Flask】路由裝飾器、路徑傳參、自定義路由轉換器
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)
相關文章
- Django(6)自定義路由轉換器Django路由
- 多徑混傳通訊-聚合路由器路由器
- Django 常用的自定義裝飾器Django
- 自定義值轉換器
- angular路由傳參Angular路由
- Vue路由傳參Vue路由
- angular 路由傳參Angular路由
- koa大型web專案中使用路由裝飾器Web路由
- 【轉載】SR 路由器的定義路由器
- react router路由傳參React路由
- react中路由傳參和url傳參React路由
- WPF自定義路由事件路由事件
- 在express中使用ES7裝飾器構建路由Express路由
- OpenHarmony自定義構建函式:@Builder裝飾器函式UI
- 路由器網路中資料包傳輸分析路由器
- 黃金搭檔 -- JS 裝飾器(Decorator)與Node.js路由Node.js路由
- SAP Commerce Cloud ( 電商雲 ) 路由路徑的自定義配置與開發Cloud路由
- Vue 路由傳值(傳參)詳解Vue路由
- Solaris網路管理:路由和閘道器(轉)路由
- JavaRetrofit2使用–自定義轉換器Java
- Native Query的自定義轉換器
- zuul 自定義路由規則Zuul路由
- vue常用操作及學習筆記(路由跳轉及路由傳參篇)Vue筆記路由
- 路由器基礎(轉)路由器
- SAP 電商雲 Spartacus UI 產品明細頁面路由路徑的自定義配置UI路由
- 網路裝置配置與管理————9、路由器路由器
- 使用 TypeScript 自定義裝飾器給類的方法增添監聽器 ListenerTypeScript
- 更換家庭主路由器及問題的解決(舊路由器可以上網換新的路由器就不可以了)路由器
- VMware 虛擬機器安裝 OpenWrt 作旁路由 單臂路由 img 映象轉 vmdk 旁路由無法上網 沒網路虛擬機路由
- 路由器用到壞才換?路由器你在乎哪些功能?路由器
- wordpress 自定義路由及展示頁路由
- OpenHarmony裝飾指定自定義元件:@BuilderParam裝飾器元件UI
- Flask——路由的使用Flask路由
- Flask動態路由Flask路由
- Flask03 路由Flask路由
- 使用 TypeScript 自定義裝飾器給類的屬性增添監聽器 ListenerTypeScript
- 路由器要再接個無線路由器路由器
- 基於hi-nginx的web開發(python篇)——路由裝飾器NginxWebPython路由