flask 自定義url轉換器

2021-09-25 05:43:16 字數 2515 閱讀 2541

可以指定url的規制,對url做一定的限制。

首先我們提乙個需求,根據需求來寫**,現在我們假設乙個url需要滿足**號碼的格式才能訪問我們的函式檢視,例如這樣的url:127.0.0.1:5000/user/《**號碼》/.

# 首先匯入baseconverter

from werkzeug.routing import baseconverter

from flask import flask

# 然後我們寫乙個類,需要繼承baseconverter這個類

class

telphoneconverter

(baseconverter)

:# 然後將我們url的規則寫到regex這個屬性上,必須為regex,正規表示式

# 以1開始,第二位數只能是3458中的乙個,然後後面隨便跟9個數字

regex =

'1[3458]\d'

# 然後我們需要註冊我們自定義的轉換器

# 'tel': 為我們給這個轉換器取的名字,我們使用的時候就會使用這個名字

# 'telephoneconverter': 為'tel'這個轉換器對應的類,也就是我們上面寫的類,當我們使用'tel'時,就會去使用這個類中的regex屬性

'tel'

]= telephoneconverter

# 然後使用我們的tel轉換器

'/user/'

)def

tel_demo

(telephone)

:return

"你的**號碼是:%s"

% telephone

然後我們就可以輸入**測試了,如果我們輸入的規則不滿足我們寫的正規表示式的話,就會出現404頁面。

在上面的tel轉換器中,我們只是寫了規則,我們還可以對url進行一些自定義的處理,然後再傳給我們的檢視函式.

這個時候就會使用到我們的to_pythonto_url方法了

需求:當輸入的url為127.0.0.1/a+b/這樣的時候,我們想在檢視函式中拿到的時候就直接是乙個列表['a','b'],而不用我們每次都去自己轉換。而當我們使用url_for闖入引數的時候,我們直接傳入['a','b'],也能直接給我們變成a+b這種形式。

**如下:

from flask import flask

from flask import url_for

from werkzeug.routing import baseconverter

class

listconverter

(baseconverter)

:# 重寫to_python方法,value就是url傳入的引數,也就是我們url中傳入的引數會經過這個方法處理之後,

# 然後再返回給我們的檢視函式,也就是我們在檢視函式中拿到的值是經過這個函式處理過後的值

defto_python

(self,value)

:return value.split(

'+')

# 重寫to_url方法,value就是我們在使用url_for的時候傳入的引數,也就是說我們傳入的引數會經過這個方法的處理,再變成url

defto_url

(self,value)

:return

"+".join(value)

# 然後我們還是要註冊我們的轉換器

'list'

]= listconverter

# 然後編寫乙個檢視來測試

'/index/'

)def

index()

:return url_for(

'board'

,boards=

['a'

,'b'])

'//'

)def

demo

(boards)

:print

(boards)

return

'boards is '

+str

(boards)

然後啟動專案,當我們訪問127.0.0.1:5000/index/的時候,我們就能看到/a+b/,這個就是to_url函式起作用了。而當我們在瀏覽中輸入127.0.01:5000/a+b/,就能看到了乙個列表。這也就是我們的to_python起作用了。

總結:

自定義url轉換器需要繼承自baseconverter這個類

url的規則需要重寫regex這個屬性(寫正規表示式)

to_python方法是在url中的引數傳入檢視函式之前,會對引數進行處理

to_url方法在使用url_for的時候,會對傳入的引數進行處理,再轉化為url

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自定義轉換器要點

本篇通過兩個示例,講解 flask 自定義轉換器的要點 1 如果需要校驗 url 中 path 的規則,在自定義轉換器的 init 方法中改寫 override baseconverter 的regex屬性。或者在轉換器所在類中直接對regex屬性賦值,如 integerconverter clas...