最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于flask路由app.route及路由參數(shù)的各種用法解析

 更新時間:2024年03月22日 09:42:48   作者:景天科技苑  
我們在開發(fā)過程中,編寫項目時所使用的路由往往是指代了框架/項目中用于完成路由功能的類,這個類一般就是路由類,簡稱路由,這篇文章主要介紹了有關(guān)flask路由app.route及路由參數(shù)的各種用法解析,需要的朋友可以參考下

flask路由

1.路由的基本定義

什么是路由?

路由就是一種映射關(guān)系。是綁定應(yīng)用程序(視圖)和url地址的一種一對一的映射關(guān)系!
我們在開發(fā)過程中,編寫項目時所使用的路由往往是指代了框架/項目中用于完成路由功能的類,這個類一般就是路由類,簡稱路由。

路由和視圖的名稱必須全局唯一,不能出現(xiàn)重復(fù),否則報錯。
路由重復(fù),走先聲明的,視圖函數(shù)重復(fù)直接報錯。

代碼示例:

# 1. 導(dǎo)入flask核心類
from flask import Flask
# 2. 初始化web應(yīng)用程序的實例對象
app = Flask(__name__)
# 開啟debug模式
app.config["DEBUG"] = True
# 參數(shù)1:rule設(shè)置當前視圖的路由地址
# 參數(shù)2:methods,設(shè)置當前視圖的HTTP請求方法,允許一個或多個方法,不區(qū)分大小寫,如果使用非設(shè)置的請求方法來訪問,會報405錯誤
@app.route(rule="/", methods=["get", "post"])
def index():
    return "<h1>hello flask1</h1>"
if __name__ == '__main__':
    # 3. 運行flask提供的測試web服務(wù)器程序
    app.run(host="0.0.0.0", port=5000)

如下,使用非指定請求方法來訪問,會報錯

使用postman來使用post請求

使用get請求測試,可以正常拿到響應(yīng)數(shù)據(jù)

2.路由參數(shù)接收方式

flask中,url可以傳遞路由參數(shù),有2種方式:

路由參數(shù)就是url路徑的一部分。

1.接收任意路由參數(shù)

# 1. 導(dǎo)入flask核心類
from flask import Flask
# 2. 初始化web應(yīng)用程序的實例對象
app = Flask(__name__)
# 開啟debug模式
app.config["DEBUG"] = True
@app.route(rule="/", methods=["get", "post"])
def index():
    return "<h1>hello flask1</h1>"
"""
路由參數(shù)的傳遞
尖括號圈住,里面寫上參數(shù)變量名
在視圖中即可通過參數(shù)列表按命名來接收
接收參數(shù)時,如果沒有在設(shè)置路由中設(shè)置參數(shù)的類型,則默認參數(shù)類型為字符串類型
"""
@app.route("/goods/<cid>/<gid>")
def goods(gid, cid):
    print(gid, type(gid))
    print(cid, type(cid))
    return f"顯示cid={cid},gid={gid}的商品信息"
if __name__ == '__main__':
    # 3. 運行flask提供的測試web服務(wù)器程序
    app.run(host="0.0.0.0", port=5000)

瀏覽器訪問,拿到url輸入的數(shù)據(jù)

2.接收限定類型參數(shù)

限定路由參數(shù)的類型,flask系統(tǒng)自帶轉(zhuǎn)換器編寫在werkzeug/routing/converters.py文件中。底部可以看到以下字典:

在這個文件的最后配置

# converters用于對路由中的參數(shù)進行格式轉(zhuǎn)換與類型限定的
 t.Mapping[str, t.Type[BaseConverter]是為了告訴讀者,里面數(shù)據(jù)左邊是個字符串,右邊是數(shù)據(jù)類型
python3.6新增了一個typing模塊,讓我們在編寫python代碼的變量時,可以同時設(shè)置變量的數(shù)據(jù)類型
DEFAULT_CONVERTERS: t.Mapping[str, t.Type[BaseConverter]] = {
    "default": UnicodeConverter, # 默認類型,也就是string
    "string": UnicodeConverter, # 字符串,不包含 /
    "any": AnyConverter,    # 任意類型
    "path": PathConverter,  # 也是字符串,但是包含了 /
    "int": IntegerConverter,
    "float": FloatConverter,
    "uuid": UUIDConverter,
}

系統(tǒng)自帶的轉(zhuǎn)換器具體使用方式在每種轉(zhuǎn)換器的注釋代碼中有寫,請留意每種轉(zhuǎn)換器初始化的參數(shù)。

代碼:

# 1. 導(dǎo)入flask核心類
from flask import Flask
# 2. 初始化web應(yīng)用程序的實例對象
app = Flask(__name__)
# 開啟debug模式
app.config["DEBUG"] = True
@app.route(rule="/", methods=["get", "post"])
def index():
    return "<h1>hello flask1</h1>"
"""
通過路由轉(zhuǎn)換器來對路由參數(shù)顯示格式轉(zhuǎn)換和限制類型
"""
@app.route("/goods/<float:cid>/<uuid:gid>")
def goods(gid, cid):
    print(gid, type(gid))
    print(cid, type(cid))
    return f"顯示cid={cid},gid={gid}的商品信息"
if __name__ == '__main__':
    # 3. 運行flask提供的測試web服務(wù)器程序
    app.run(host="0.0.0.0", port=5000)

此時對于傳入非指定類型的參數(shù),則會報404錯誤

傳指定類型參數(shù),才能正常訪問

3.自定義路由參數(shù)轉(zhuǎn)換器

也叫正則匹配路由參數(shù).

在 web 開發(fā)中,可能會出現(xiàn)限制用戶訪問規(guī)則的場景,那么這個時候就需要用到正則匹配,根據(jù)自己的規(guī)則去限定請求參數(shù)再進行訪問

具體實現(xiàn)步驟為:

  • 導(dǎo)入轉(zhuǎn)換器基類BaseConverter:在 Flask 中,所有的路由的匹配規(guī)則都是使用轉(zhuǎn)換器對象進行記錄
  • 自定義轉(zhuǎn)換器:自定義類繼承于轉(zhuǎn)換器基類BaseConverter
  • 添加轉(zhuǎn)換器到默認的轉(zhuǎn)換器字典DEFAULT_CONVERTERS中
  • 使用自定義轉(zhuǎn)換器實現(xiàn)自定義匹配規(guī)則

代碼實現(xiàn)

# 1. 導(dǎo)入flask核心類
from flask import Flask
# 2. 初始化web應(yīng)用程序的實例對象
app = Flask(__name__)
# 開啟debug模式
app.config["DEBUG"] = True
"""
自定義路由轉(zhuǎn)換[在實際項目開發(fā)中,我們會單獨準備一個python文件來保存轉(zhuǎn)換器的定義代碼]
"""
from werkzeug.routing.converters import BaseConverter
#在我們自定義的類里面寫正則規(guī)則,并要繼承BaseConverter
class MobileConverter(BaseConverter):
    """手機號參數(shù)類型的轉(zhuǎn)換器"""
    regex = r"1[3-9]\d{9}"
# 把自定義路由轉(zhuǎn)換器類注冊到flask項目中,中括號里面的參數(shù)我們下面路由轉(zhuǎn)換器類要用到
app.url_map.converters["mob"] = MobileConverter
@app.route("/sms/<mob:mobile>")
def sms(mobile):
    return f"發(fā)送短信給手機號:{mobile}的用戶"
if __name__ == '__main__':
    # 3. 運行flask提供的測試web服務(wù)器程序
    app.run(host="0.0.0.0", port=5000)

運行程序訪問,但凡不滿足正則規(guī)則的請求,都無法正常訪問
手機號太短

包含非數(shù)字

滿足正則要求的手機號,可以正常訪問

但是這樣,我們寫個類就把正則規(guī)則定死了,不方便其他路由調(diào)用
因此,我們需要優(yōu)化,我們需要根據(jù)實際需要的正則來分別自定義
此時,我們需要將正則作為參數(shù)傳進去

導(dǎo)入轉(zhuǎn)換器基類
from werkzeug.routing.converters import BaseConverter

自定義轉(zhuǎn)換器
先看下父類

class RegexConverter(BaseConverter):
    def __init__(self, map, *args, **kwargs):
        super().__init__(map, *args, **kwargs)  #我們不用進行類型限定
        self.regex = args[0]
- 添加轉(zhuǎn)換器到默認的轉(zhuǎn)換器字典中,并指定轉(zhuǎn)換器使用時名字為: re
app.url_map.converters["re"] = RegexConverter
- 使用轉(zhuǎn)換器去實現(xiàn)自定義匹配規(guī)則,當前此處定義的規(guī)則是:手機號碼 
"""
自定義路由轉(zhuǎn)換[在實際項目開發(fā)中,我們會單獨準備一個python文件來保存轉(zhuǎn)換器的定義代碼]
"""
from werkzeug.routing.converters import BaseConverter
class RegexConverter(BaseConverter):
    def __init__(self, map, *args, **kwargs):
        super().__init__(map, *args, **kwargs)
        self.regex = args[0]
app.url_map.converters["re"] = RegexConverter
@app.route("/sms/<re('1[3-9]\d{9}'):mobile>")
def sms(mobile):
    return f"發(fā)送短信給手機號:{mobile}的用戶"
@app.route("/goods/<re('\d+'):id>")
def goods(id):
    return f"顯示商品id={id}的信息"

完整代碼,包含各種注釋解釋:

# 1. 導(dǎo)入flask核心類
from flask import Flask
# 2. 初始化web應(yīng)用程序的實例對象
app = Flask(__name__)
# 開啟debug模式
app.config["DEBUG"] = True
"""
自定義路由轉(zhuǎn)換[在實際項目開發(fā)中,我們會單獨準備一個python文件來保存轉(zhuǎn)換器的定義代碼]
"""
from werkzeug.routing.converters import BaseConverter
#注意,自定義的類需要繼承BaseConverter,并且要重載父類初始化方法,初始化父類,接收re的參數(shù)
class RegexConverter(BaseConverter):
    def __init__(self, map, *args, **kwargs):
        super().__init__(map, *args, **kwargs)
        self.regex = args[0]
#中括號里面的值 re,就是我們在路由定義轉(zhuǎn)換器類時需要調(diào)用的
app.url_map.converters["re"] = RegexConverter   #這個就是我們自定義的類
@app.route("/sms/<re('1[3-9]\d{9}'):mobile>")  #這樣,每次路由在參數(shù)正則定義式,就作為參數(shù)傳給我們定義的類
def sms(mobile):
    return f"發(fā)送短信給手機號:{mobile}的用戶"
@app.route("/goods/<re('\d+'):id>")  #此時傳的是id的正則,只限制數(shù)字
def goods(id):
    return f"顯示商品id={id}的信息"
if __name__ == '__main__':
    # 3. 運行flask提供的測試web服務(wù)器程序
    app.run(host="0.0.0.0", port=5000)

如果我們隨便輸入?yún)?shù),則訪問不到

輸入正確的手機號可以訪問到

發(fā)送正確的商品id,也可以訪問到

到此這篇關(guān)于有關(guān)flask路由app.route及路由參數(shù)的各種用法解析的文章就介紹到這了,更多相關(guān)flask路由app.route內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Pycharm IDE安裝環(huán)境配置的2025最新完整版教程

    Pycharm IDE安裝環(huán)境配置的2025最新完整版教程

    PyCharm是目前最流行、使用最廣泛的Python IDE,帶有一整套可以幫助用戶在使用Python語言開發(fā)時提高其效率的工具,下面我們來看看Pycharm IDE安裝環(huán)境配置的最新教程吧
    2025-03-03
  • python numpy庫np.percentile用法說明

    python numpy庫np.percentile用法說明

    這篇文章主要介紹了python numpy庫np.percentile用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python變量賦值機制踩坑記錄

    python變量賦值機制踩坑記錄

    這篇文章主要介紹了python變量賦值機制踩坑記錄,我們都知道python有深拷貝和淺拷貝,但變量賦值又是什么機制呢?這是個容易被忽略卻又極易踩坑的點,下面我們來一探究竟,需要的朋友可以參考一下
    2022-02-02
  • Python文件名匹配與文件復(fù)制的實現(xiàn)

    Python文件名匹配與文件復(fù)制的實現(xiàn)

    這篇文章主要介紹了Python文件名匹配與文件復(fù)制的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • PyQt5中QAbstractScrollArea的詳細用法教程

    PyQt5中QAbstractScrollArea的詳細用法教程

    在PyQt5中,QAbstractScrollArea是一個非常重要的類,它提供了滾動區(qū)域的基本框架,允許用戶通過滾動條來查看超出可視區(qū)域的內(nèi)容,本文將結(jié)合具體案例,詳細講解QAbstractScrollArea的用法,需要的朋友可以參考下
    2024-08-08
  • django自定義模板標簽過程解析

    django自定義模板標簽過程解析

    這篇文章主要介紹了django自定義模板標簽過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2019-12-12
  • pyecharts的Tab和Legend布局詳情

    pyecharts的Tab和Legend布局詳情

    這篇文章主要介紹了pyecharts的Tab和Legend布局,pyecharts是百度開源的一款第三方繪圖模塊,結(jié)合的python語言的簡易性和Echarts的強大繪圖特性,可以用python對其調(diào)用,輸出交互性好,精美乖巧且符合審美的圖表,下文我們就來學(xué)習pyecharts的Tab和Legend煩人布局布局
    2022-03-03
  • Python中圖片壓縮小工具的開發(fā)與異常解決詳解

    Python中圖片壓縮小工具的開發(fā)與異常解決詳解

    這篇文章主要為大家詳細介紹了如何通過Deep Seek編寫Python代碼,制作一個圖片壓縮小工具,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下
    2025-09-09
  • Python OS模塊中常用的文件和目錄操作方法

    Python OS模塊中常用的文件和目錄操作方法

    在Python編程中,os模塊提供了用于與操作系統(tǒng)交互的功能,其中,文件和目錄操作是os模塊的核心功能之一,本文將詳細介紹os模塊中常用的文件和目錄操作方法,需要的朋友可以參考下
    2026-03-03
  • python實現(xiàn)批量提取指定文件夾下同類型文件

    python實現(xiàn)批量提取指定文件夾下同類型文件

    這篇文章主要為大家詳細介紹了python實現(xiàn)批量提取指定文件夾下同類型文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04

最新評論

龙海市| 洛南县| 正阳县| 北宁市| 渭南市| 宁津县| 云浮市| 上虞市| 五家渠市| 古浪县| 龙胜| 南华县| 南宫市| 洪雅县| 特克斯县| 黄石市| 张家口市| 民勤县| 砚山县| 江津市| 珠海市| 通道| 大姚县| 馆陶县| 太白县| 若羌县| 宜昌市| 乳山市| 淳化县| 丰县| 冕宁县| 临猗县| 淳化县| 汾西县| 伊宁县| 抚松县| 敦煌市| 都江堰市| 蓬莱市| 长垣县| 金堂县|