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

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

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

flask路由

1.路由的基本定義

什么是路由?

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

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

代碼示例:

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

如下,使用非指定請(qǐng)求方法來訪問,會(huì)報(bào)錯(cuò)

使用postman來使用post請(qǐng)求

使用get請(qǐng)求測(cè)試,可以正常拿到響應(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)用程序的實(shí)例對(duì)象
app = Flask(__name__)
# 開啟debug模式
app.config["DEBUG"] = True
@app.route(rule="/", methods=["get", "post"])
def index():
    return "<h1>hello flask1</h1>"
"""
路由參數(shù)的傳遞
尖括號(hào)圈住,里面寫上參數(shù)變量名
在視圖中即可通過參數(shù)列表按命名來接收
接收參數(shù)時(shí),如果沒有在設(shè)置路由中設(shè)置參數(shù)的類型,則默認(rèn)參數(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. 運(yùn)行flask提供的測(cè)試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文件中。底部可以看到以下字典:

在這個(gè)文件的最后配置

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

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

代碼:

# 1. 導(dǎo)入flask核心類
from flask import Flask
# 2. 初始化web應(yīng)用程序的實(shí)例對(duì)象
app = Flask(__name__)
# 開啟debug模式
app.config["DEBUG"] = True
@app.route(rule="/", methods=["get", "post"])
def index():
    return "<h1>hello flask1</h1>"
"""
通過路由轉(zhuǎn)換器來對(duì)路由參數(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. 運(yùn)行flask提供的測(cè)試web服務(wù)器程序
    app.run(host="0.0.0.0", port=5000)

此時(shí)對(duì)于傳入非指定類型的參數(shù),則會(huì)報(bào)404錯(cuò)誤

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

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

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

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

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

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

代碼實(shí)現(xiàn)

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

運(yùn)行程序訪問,但凡不滿足正則規(guī)則的請(qǐng)求,都無法正常訪問
手機(jī)號(hào)太短

包含非數(shù)字

滿足正則要求的手機(jī)號(hào),可以正常訪問

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

導(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)  #我們不用進(jìn)行類型限定
        self.regex = args[0]
- 添加轉(zhuǎn)換器到默認(rèn)的轉(zhuǎn)換器字典中,并指定轉(zhuǎn)換器使用時(shí)名字為: re
app.url_map.converters["re"] = RegexConverter
- 使用轉(zhuǎn)換器去實(shí)現(xiàn)自定義匹配規(guī)則,當(dāng)前此處定義的規(guī)則是:手機(jī)號(hào)碼 
"""
自定義路由轉(zhuǎn)換[在實(shí)際項(xiàng)目開發(fā)中,我們會(huì)單獨(dú)準(zhǔn)備一個(gè)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ā)送短信給手機(jī)號(hào):{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)用程序的實(shí)例對(duì)象
app = Flask(__name__)
# 開啟debug模式
app.config["DEBUG"] = True
"""
自定義路由轉(zhuǎn)換[在實(shí)際項(xiàng)目開發(fā)中,我們會(huì)單獨(dú)準(zhǔn)備一個(gè)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]
#中括號(hào)里面的值 re,就是我們?cè)诼酚啥x轉(zhuǎn)換器類時(shí)需要調(diào)用的
app.url_map.converters["re"] = RegexConverter   #這個(gè)就是我們自定義的類
@app.route("/sms/<re('1[3-9]\d{9}'):mobile>")  #這樣,每次路由在參數(shù)正則定義式,就作為參數(shù)傳給我們定義的類
def sms(mobile):
    return f"發(fā)送短信給手機(jī)號(hào):{mobile}的用戶"
@app.route("/goods/<re('\d+'):id>")  #此時(shí)傳的是id的正則,只限制數(shù)字
def goods(id):
    return f"顯示商品id={id}的信息"
if __name__ == '__main__':
    # 3. 運(yùn)行flask提供的測(cè)試web服務(wù)器程序
    app.run(host="0.0.0.0", port=5000)

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

輸入正確的手機(jī)號(hào)可以訪問到

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

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

相關(guān)文章

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

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

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

    python numpy庫np.percentile用法說明

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

    python變量賦值機(jī)制踩坑記錄

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

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

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

    PyQt5中QAbstractScrollArea的詳細(xì)用法教程

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

    django自定義模板標(biāo)簽過程解析

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

    pyecharts的Tab和Legend布局詳情

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

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

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

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

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

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

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

最新評(píng)論

南陵县| 林州市| 盘山县| 思茅市| 田林县| 绥芬河市| 滦平县| 临泽县| 闵行区| 星子县| 绥芬河市| 玉屏| 迁安市| 通河县| 龙泉市| 南雄市| 临颍县| 宁化县| 鄯善县| 临夏市| 永宁县| 和静县| 孙吴县| 曲麻莱县| 晋中市| 墨江| 诸暨市| 五家渠市| 宜阳县| 满城县| 拜泉县| 民县| 遂昌县| 房产| 绥芬河市| 鹤庆县| 慈溪市| 张家口市| 房产| 诏安县| 铁岭市|