欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

flask框架自定義url轉(zhuǎn)換器操作詳解

 更新時(shí)間:2020年01月25日 11:24:43   作者:stu_xujin  
這篇文章主要介紹了flask框架自定義url轉(zhuǎn)換器操作,結(jié)合實(shí)例形式分析了URL轉(zhuǎn)換器的相關(guān)原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了flask框架自定義url轉(zhuǎn)換器。分享給大家供大家參考,具體如下:

什么是url轉(zhuǎn)換器

可以指定url的規(guī)制,對(duì)url做一定的限制。

自帶的url轉(zhuǎn)換器

可以參考我的上一篇博客: flask–url與重定向詳解

自定義url轉(zhuǎn)換器

首先我們提一個(gè)需求,根據(jù)需求來(lái)寫(xiě)代碼,現(xiàn)在我們假設(shè)一個(gè)url需要滿足電話號(hào)碼的格式才能訪問(wèn)我們的函數(shù)視圖,例如這樣的url: 127.0.0.1:5000/user/<電話號(hào)碼>/.

# 首先導(dǎo)入BaseConverter
from werkzeug.routing import BaseConverter
from flask import Flask
app = Flask(__name__)
# 然后我們寫(xiě)一個(gè)類(lèi),需要繼承BaseConverter這個(gè)類(lèi)
class TelphoneConverter(BaseConverter):
 # 然后將我們url的規(guī)則寫(xiě)到regex這個(gè)屬性上,必須為regex,正則表達(dá)式
 # 以1開(kāi)始,第二位數(shù)只能是3458中的一個(gè),然后后面隨便跟9個(gè)數(shù)字
 regex = '1[3458]\d{9}'
# 然后我們需要注冊(cè)我們自定義的轉(zhuǎn)換器
# 'tel': 為我們給這個(gè)轉(zhuǎn)換器取的名字,我們使用的時(shí)候就會(huì)使用這個(gè)名字
# 'TelephoneConverter': 為'tel'這個(gè)轉(zhuǎn)換器對(duì)應(yīng)的類(lèi),也就是我們上面寫(xiě)的類(lèi),當(dāng)我們使用'tel'時(shí),就會(huì)去使用這個(gè)類(lèi)中的regex屬性
app.url_map.converters['tel'] = TelephoneConverter
# 然后使用我們的tel轉(zhuǎn)換器
@app.route('/user/<tel:telephone>')
def tel_demo(telephone):
 return "你的電話號(hào)碼是:%s" % telephone

然后我們就可以輸入網(wǎng)址測(cè)試了,如果我們輸入的規(guī)則不滿足我們寫(xiě)的正則表達(dá)式的話,就會(huì)出現(xiàn)404頁(yè)面。

在上面的tel轉(zhuǎn)換器中,我們只是寫(xiě)了規(guī)則,我們還可以對(duì)url進(jìn)行一些自定義的處理,然后再傳給我們的視圖函數(shù).

這個(gè)時(shí)候就會(huì)使用到我們的to_python和to_url方法了

需求:當(dāng)輸入的url為127.0.0.1/a+b/這樣的時(shí)候,我們想在視圖函數(shù)中拿到的時(shí)候就直接是一個(gè)列表['a','b'],而不用我們每次都去自己轉(zhuǎn)換。而當(dāng)我們使用url_for闖入?yún)?shù)的時(shí)候,我們直接傳入['a','b'],也能直接給我們變成a+b這種形式。

代碼如下:

from flask import Flask
from flask import url_for
from werkzeug.routing import BaseConverter
class ListConverter(BaseConverter):
 # 重寫(xiě)to_python方法,value就是url傳入的參數(shù),也就是我們url中傳入的參數(shù)會(huì)經(jīng)過(guò)這個(gè)方法處理之后,
 # 然后再返回給我們的視圖函數(shù),也就是我們?cè)谝晥D函數(shù)中拿到的值是經(jīng)過(guò)這個(gè)函數(shù)處理過(guò)后的值
 def to_python(self,value):
 return value.split('+')
 # 重寫(xiě)to_url方法,value就是我們?cè)谑褂胾rl_for的時(shí)候傳入的參數(shù),也就是說(shuō)我們傳入的參數(shù)會(huì)經(jīng)過(guò)這個(gè)方法的處理,再變成url
 def to_url(self,value):
 return "+".join(value)
# 然后我們還是要注冊(cè)我們的轉(zhuǎn)換器
app.url_map.converters['list'] = ListConverter
# 然后編寫(xiě)一個(gè)視圖來(lái)測(cè)試
@app.route('/index/')
def index():
 return url_for('board',boards=['a','b'])
@app.route('/<list:boards>/')
def demo(boards):
 print(boards)
 return 'boards is ' + str(boards)

然后啟動(dòng)項(xiàng)目,當(dāng)我們?cè)L問(wèn)127.0.0.1:5000/index/的時(shí)候,我們就能看到/a+b/,這個(gè)就是to_url函數(shù)起作用了。而當(dāng)我們?cè)跒g覽中輸入127.0.01:5000/a+b/,就能看到了一個(gè)列表。這也就是我們的to_python起作用了。

總結(jié):

  • 自定義url轉(zhuǎn)換器需要繼承自BaseConverter這個(gè)類(lèi)
  • url的規(guī)則需要重寫(xiě)regex這個(gè)屬性(寫(xiě)正則表達(dá)式)
  • to_python方法是在url中的參數(shù)傳入視圖函數(shù)之前,會(huì)對(duì)參數(shù)進(jìn)行處理
  • to_url方法在使用url_for的時(shí)候,會(huì)對(duì)傳入的參數(shù)進(jìn)行處理,再轉(zhuǎn)化為url
  • 最后,一定要將自定義的url轉(zhuǎn)換器添加至app.url_map.converters中

希望本文所述對(duì)大家基于flask框架的Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • tensorflow estimator 使用hook實(shí)現(xiàn)finetune方式

    tensorflow estimator 使用hook實(shí)現(xiàn)finetune方式

    今天小編就為大家分享一篇tensorflow estimator 使用hook實(shí)現(xiàn)finetune方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • Python輕松搞定視頻剪輯重復(fù)性工作問(wèn)題

    Python輕松搞定視頻剪輯重復(fù)性工作問(wèn)題

    這篇文章主要介紹了Python輕松搞定視頻剪輯重復(fù)性工作問(wèn)題,大家做視頻剪輯的時(shí)候,還在重復(fù)性工作嗎?今天,小編來(lái)教大家如何利用Python幫你搞定這些重復(fù)性的剪輯工作,需要的朋友可以參考一下
    2021-12-12
  • Python的Flask框架開(kāi)發(fā)驗(yàn)證碼登錄的實(shí)現(xiàn)

    Python的Flask框架開(kāi)發(fā)驗(yàn)證碼登錄的實(shí)現(xiàn)

    在本文我們介紹了如何使用Python的Flask框架開(kāi)發(fā)一個(gè)簡(jiǎn)單的驗(yàn)證碼登錄功能,將涵蓋生成驗(yàn)證碼、處理用戶輸入、驗(yàn)證驗(yàn)證碼以及實(shí)現(xiàn)安全的用戶認(rèn)證等方面,感興趣的可以了解一下
    2023-11-11
  • python使用opencv驅(qū)動(dòng)攝像頭的方法

    python使用opencv驅(qū)動(dòng)攝像頭的方法

    今天小編就為大家分享一篇python使用opencv驅(qū)動(dòng)攝像頭的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • python高級(jí)之元類(lèi)的用法總結(jié)

    python高級(jí)之元類(lèi)的用法總結(jié)

    元類(lèi)是Python中最高級(jí)別的編程概念之一,用于創(chuàng)建類(lèi)的類(lèi),雖然元類(lèi)在日常Python編程中并不常見(jiàn),但它們提供了無(wú)限的可能性來(lái)改變類(lèi)的行為,從而使元編程成為可能,這篇文章主要給大家介紹了關(guān)于python高級(jí)之元類(lèi)的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • python益智游戲計(jì)算漢諾塔問(wèn)題示例

    python益智游戲計(jì)算漢諾塔問(wèn)題示例

    漢諾塔(又稱河內(nèi)塔)問(wèn)題是源于印度一個(gè)古老傳說(shuō)的益智玩具。
    2014-03-03
  • python ip正則式

    python ip正則式

    python下的ip正則實(shí)現(xiàn)代碼。
    2009-05-05
  • python項(xiàng)目運(yùn)行導(dǎo)致內(nèi)存越來(lái)越大的原因詳析

    python項(xiàng)目運(yùn)行導(dǎo)致內(nèi)存越來(lái)越大的原因詳析

    最近在跑python程序時(shí),出現(xiàn)占用的內(nèi)存不斷增加的情況,下面這篇文章主要給大家介紹了關(guān)于python項(xiàng)目運(yùn)行導(dǎo)致內(nèi)存越來(lái)越大的原因詳析,本文通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Python版名片管理系統(tǒng)

    Python版名片管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Python版名片管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Python編寫(xiě)Windows Service服務(wù)程序

    Python編寫(xiě)Windows Service服務(wù)程序

    這篇文章主要為大家詳細(xì)介紹了Python編寫(xiě)Windows Service服務(wù)程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評(píng)論