本篇通過兩個示例,講解 flask 自定義轉換器的要點:
1、如果需要校驗 url 中 path 的規則,在自定義轉換器的__init__()
方法中改寫 (override)baseconverter 的regex
屬性。或者在轉換器所在類中直接對regex
屬性賦值,如 integerconverter:
class
integerconverter
(numberconverter)
: regex = r"\d+"
num_convert =
int
2、如果要對 url 中的 path 值傳給 view function 時進行改變,改寫 (override) 自定義轉換器的to_python()
方法。該方法將 path 轉換為 python 物件。
實現功能:url path 為 user id,在 view functiion 中顯示為 user name。使用者資料用 dict 表示,不從資料庫中讀取。
# validusers.py
from werkzeug.routing import baseconverter, validationerror
_users =[,
]def
find_user
(userid)
:for user in _users:
if userid == user[
'id']:
return user
class
validuserconverter
(baseconverter)
:def
to_python
(self, value):if
not find_user(value)
isnone
:return find_user(value)
['username'
]raise validationerror(
)
flask 程式使用 validuserconverter:
from flask import flask, jsonify, url_for
from validuser import validuserconverter
'validuser'
]= validuserconverter
'/')
defindex()
:return
'home page'
'/users/'
)def
greet_user
(userid)
:return jsonify(
)if __name__ ==
"__main__":)
當客戶端請求路徑為:
localhost:5000/users/1
返回的 json 為:
示例改寫自博文後標註的參考文章,要實現的功能:允許在請求的 url path 中使用 + 號,轉換器將 + 號連線的 path 解析為 list,從而增加了查詢的靈活性。比如可以同時查詢 id 為 1、2、3 的使用者資訊。
# listconverter.py
from werkzeug.routing import baseconverter
class
listconverter
(baseconverter)
:def
to_python
(self, value)
:return value.split(
'+')
defto_url
(self, values)
:return
'+'.join(
str(value)
for value in values)
flask 程式使用 listconverter:
from flask import flask, jsonify, url_for
from listconverter import listconverter
'list'
]= listconverter
'/')
defindex()
(url_for(
'greet_user'
, users=[1
,4,6
]))return
'home page'
'/users/'
)def
greet_user
(users)
: names =
','.join(user for user in users)
return
'hello: '
+ names
if __name__ ==
"__main__":)
當客戶端請求的 url path 為:
localhost:5000/users/1+2+5
傳給 view functiongreet_user()
函式的引數被轉換為 list(1,2,5),從而方便進行轉換。
github
Flask自定義轉換器
flask框架中自帶的轉換器 default converters flask框架中的轉換器的自定義,具體流程如下 匯入轉換器基類 在 flask 中,所有的路由的匹配規則都是使用轉換器物件進行記錄 自定義轉換器 自定義類繼承於轉換器基類 新增轉換器到預設的轉換器字典中 使用自定義轉換器實現自定義匹...
flask自定義re轉換器
自帶的幾種轉換器 default converters 自定義re轉換器 from werkzeug.routing import baseconverter 正則轉換器 class regexconverter baseconverter def init self,url map,args su...
flask 自定義url轉換器
可以指定url的規制,對url做一定的限制。首先我們提乙個需求,根據需求來寫 現在我們假設乙個url需要滿足 號碼的格式才能訪問我們的函式檢視,例如這樣的url 127.0.0.1 5000 user 號碼 首先匯入baseconverter from werkzeug.routing import...