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

Flask請(qǐng)求鉤子與上下文及異常處理分項(xiàng)精解

 更新時(shí)間:2022年10月13日 10:00:11   作者:Ywx_csdn  
這篇文章主要介紹了Flask請(qǐng)求鉤子與上下文及異常處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧

一、請(qǐng)求鉤子學(xué)習(xí)

介紹

1.為了讓每個(gè)視圖函數(shù)避免編寫重復(fù)功能的代碼,F(xiàn)lask提供了通用設(shè)施的功能,即請(qǐng)求鉤子。

2.請(qǐng)求鉤子是通過(guò)裝飾器的形式實(shí)現(xiàn),F(xiàn)lask支持如下四種請(qǐng)求鉤子:

請(qǐng)求鉤子是通過(guò)裝飾器的形式實(shí)現(xiàn),F(xiàn)lask支持如下四種請(qǐng)求鉤子:

1.before_first_request

- 在處理第一個(gè)請(qǐng)求前執(zhí)行

2.before_request

- 在每次請(qǐng)求前執(zhí)行

- 如果在某修飾的函數(shù)中返回了一個(gè)響應(yīng),視圖函數(shù)將不再被調(diào)用

3.after_request

- 如果沒有拋出錯(cuò)誤,在每次請(qǐng)求后執(zhí)行

- 接受一個(gè)參數(shù):視圖函數(shù)作出的響應(yīng)

- 在此函數(shù)中可以對(duì)響應(yīng)值在返回之前做最后一步修改處理

- 需要將參數(shù)中的響應(yīng)在此參數(shù)中進(jìn)行返回

4.teardown_request:

- 在每次請(qǐng)求后執(zhí)行

- 接受一個(gè)參數(shù):錯(cuò)誤信息,如果有相關(guān)錯(cuò)誤拋出

代碼示例:

from flask import *
app=Flask(__name__)
# 在第一次請(qǐng)求之前調(diào)用,可以在此方法內(nèi)部做一些初始化操作
@app.before_first_request
def before_first_requests():
    print('服務(wù)器第一次接受請(qǐng)求的時(shí)候執(zhí)行')
# 在每一次請(qǐng)求之前調(diào)用,這時(shí)候已經(jīng)有請(qǐng)求了,可能在這個(gè)方法里面做請(qǐng)求的校驗(yàn)
# 如果請(qǐng)求的校驗(yàn)不成功,可以直接在此方法中進(jìn)行響應(yīng),直接return之后那么就不會(huì)執(zhí)行視圖函數(shù)
@app.before_request
def before_request():
    print('每次視圖函數(shù)執(zhí)行之前執(zhí)行')
    #如果有return,后面的視圖函數(shù)就不執(zhí)行了
    #return "提前結(jié)束“
    # if 請(qǐng)求不符合條件:
    # return "laowang"
# 在執(zhí)行完視圖函數(shù)之后會(huì)調(diào)用,并且會(huì)把視圖函數(shù)所生成的響應(yīng)傳入,可以在此方法中對(duì)響應(yīng)做最后一步統(tǒng)一的處理
@app.after_request
def after_request(resp):
    print('每次視圖函數(shù)執(zhí)行之后執(zhí)行')
    return resp
# 每一次請(qǐng)求之后都會(huì)調(diào)用,會(huì)接受一個(gè)參數(shù),參數(shù)是服務(wù)器出現(xiàn)的錯(cuò)誤信息
@app.teardown_request
def teardown_request(resp):
    print('請(qǐng)求結(jié)束時(shí)執(zhí)行!')
@app.route('/test1')
def test1():
    return "請(qǐng)求開始"
@app.route('/test2')
def test2():
    return "請(qǐng)求鉤子結(jié)束"
if __name__ == '__main__':
    app.run()
'''contex_processor: 當(dāng)項(xiàng)目中的所有模板都需要一個(gè)參數(shù)的時(shí)候,可以在context_processor鉤子函數(shù)定義,并且自動(dòng)傳給所有模板,該函數(shù)一定要返回字典 '''

第一次執(zhí)行:

第二次執(zhí)行

1、通過(guò)對(duì)比可以發(fā)現(xiàn)第二次執(zhí)行時(shí),@app.before_first_request 裝飾器并沒有執(zhí)行,因?yàn)樵诘谝淮握{(diào)用時(shí),就已經(jīng)把準(zhǔn)備工作做好。

2、它的工作如 在請(qǐng)求開始時(shí),建立數(shù)據(jù)庫(kù)連接; 在請(qǐng)求開始時(shí),根據(jù)需求進(jìn)行權(quán)限校驗(yàn);

二、上下文

1.介紹

上下文:即語(yǔ)境,語(yǔ)意,在程序中可以理解為在代碼執(zhí)行到某一時(shí)刻時(shí),根據(jù)之前代碼所做的操作以及下文即將要

執(zhí)行的邏輯,可以決定在當(dāng)前時(shí)刻下可以使用到的變量,或者可以完成的事情。

Flask中有兩種上下文,請(qǐng)求上下文和應(yīng)用上下文

Flask中上下文對(duì)象:相當(dāng)于一個(gè)容器,保存了 Flask 程序運(yùn)行過(guò)程中的一些信息。

2.請(qǐng)求上下文

思考:在視圖函數(shù)中,如何取到當(dāng)前請(qǐng)求的相關(guān)數(shù)據(jù)?

比如:請(qǐng)求地址,請(qǐng)求方式,cookie等等

在 flask 中,可以直接在視圖函數(shù)中使用 request 這個(gè)對(duì)象進(jìn)行獲取相關(guān)數(shù)據(jù),而 request 就是請(qǐng)求上下文的對(duì)象,保存了當(dāng)前本次請(qǐng)求的相關(guān)數(shù)據(jù),請(qǐng)求上下文對(duì)象有:request、session

request

封裝了HTTP請(qǐng)求的內(nèi)容,針對(duì)的是http請(qǐng)求。舉例:user = request.args.get(‘user’),獲取的是get請(qǐng)求的參數(shù)。

session

用來(lái)記錄請(qǐng)求會(huì)話中的信息,針對(duì)的是用戶信息。舉例:session[‘name’] = user.id,可以記錄用戶信息。還可以通過(guò)session.get('name’獲取用戶信息。

3.應(yīng)用上下文

它的字面意思是 應(yīng)用上下文,但它不是一直存在的,它只是request context 中的一個(gè)對(duì) app 的代理(人),所謂

local proxy。它的作用主要是幫助 request 獲取當(dāng)前的應(yīng)用,它是伴 request 而生,隨 request 而滅的。

應(yīng)用上下文對(duì)象有:current_app,g

current_app

應(yīng)用程序上下文,用于存儲(chǔ)應(yīng)用程序中的變量,可以通過(guò)current_app.name打印當(dāng)前app的名稱,也可以在

current_app中存儲(chǔ)一些變量,例如:

應(yīng)用的啟動(dòng)腳本是哪個(gè)文件,啟動(dòng)時(shí)指定了哪些參數(shù)

加載了哪些配置文件,導(dǎo)入了哪些配置

連了哪個(gè)數(shù)據(jù)庫(kù)

有哪些public的工具類、常量

應(yīng)用跑再哪個(gè)機(jī)器上,IP多少,內(nèi)存多大

注意:

current_app 就是當(dāng)前運(yùn)行的flask app,在代碼不方便直接操作flask的app對(duì)象時(shí),可以操作current_app就等 價(jià)于操作flask app對(duì)象

代碼示例

from flask import Flask, current_app
app= Flask(__name__)
# 以ywx客戶端對(duì)象為例
# 用字符串表示創(chuàng)建的ywx客戶端
# 為了方便在各個(gè)視圖中使用,將創(chuàng)建的ywx客戶端對(duì)象保存到flask app中,
# 后續(xù)可以在視圖中使用current_app.ywx獲取
app.ywx = 'hello flask'
@app.route('/test')
def test():
	return current_app.ywx
if __name__ == '__main__':
    app.run()

客戶端請(qǐng)求界面:

4.G對(duì)象

  • g 作為 flask 程序全局的一個(gè)臨時(shí)變量,充當(dāng)中間媒介的作用,我們可以通過(guò)它在一次請(qǐng)求調(diào)用的多個(gè)函數(shù)間傳遞一些數(shù)據(jù)。
  • 每次請(qǐng)求都會(huì)重設(shè)這個(gè)變量。

g對(duì)象可以結(jié)合前面學(xué)的藍(lán)圖來(lái)使用(感興趣的可以去看前面章節(jié)flask 藍(lán)圖學(xué)習(xí))

在藍(lán)圖包中創(chuàng)建一個(gè)新的藍(lán)圖:

在創(chuàng)建定義 g變量py文件。

3. 在整個(gè)項(xiàng)目里面建一個(gè)調(diào)用g變量的py文件

4. 在應(yīng)用程序中調(diào)用g變量

5. 在服務(wù)器端可以訪問(wèn)得到

在瀏覽器端界面

三、異常處理

1.HTTP異常主動(dòng)拋出

abort 方法

拋出一個(gè)給定狀態(tài)代碼的 HTTPException 或者 指定響應(yīng),例如想要用一個(gè) 頁(yè)面未找到異常來(lái)終止請(qǐng) 求,你可以調(diào)用 abort(404)。

參數(shù):

code – HTTP的錯(cuò)誤狀態(tài)

abort(404)

abort(500)

拋出狀態(tài)碼的話,只能拋出 HTTP 協(xié)議的錯(cuò)誤狀態(tài)碼

2.捕獲錯(cuò)誤

errorhandler 裝飾器

注冊(cè)一個(gè)錯(cuò)誤處理程序,當(dāng)程序拋出指定錯(cuò)誤狀態(tài)碼的時(shí)候,就會(huì)調(diào)用該裝飾器所裝飾的方法

參數(shù):

code_or_exception – HTTP的錯(cuò)誤狀態(tài)碼或指定異

1.可以在templates下新建html報(bào)錯(cuò)文件,通過(guò)errorhandler 裝飾器 當(dāng)報(bào)指定的錯(cuò)誤時(shí),可以通過(guò)render_template函數(shù)。

2.將其報(bào)錯(cuò)信息跳轉(zhuǎn)到客戶端(瀏覽器)顯示

from flask import *
app=Flask(__name__)
@app.route('/')
def hello_world():
    1/0
    #接受一個(gè)請(qǐng)求參數(shù)
    name=request.args.get('name')
    if name:
        print(name)
    else:
        abort(500)
        print('后面代碼不執(zhí)行')
        return 'hello world!'
@app.errorhandler(404)
def error_ym(error):
    print(error)
    return render_template('404.html'),404
@app.errorhandler(500)
def error_sr(error):
    print(error)
    return render_template('500.html'),500
if __name__ == '__main__':
    app.run()

請(qǐng)求出錯(cuò)時(shí)顯示自定義的報(bào)錯(cuò)信息!

自定義的html報(bào)錯(cuò)文件

到此這篇關(guān)于Flask請(qǐng)求鉤子與上下文及異常處理分項(xiàng)精解的文章就介紹到這了,更多相關(guān)Flask請(qǐng)求鉤子內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python內(nèi)置加密模塊用法解析

    Python內(nèi)置加密模塊用法解析

    這篇文章主要介紹了Python內(nèi)置加密模塊用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • python使用pip成功導(dǎo)入庫(kù)后還是報(bào)錯(cuò)的解決方法(針對(duì)vscode)

    python使用pip成功導(dǎo)入庫(kù)后還是報(bào)錯(cuò)的解決方法(針對(duì)vscode)

    最近在學(xué)爬蟲,但在使用Scrapy包時(shí),在終端通過(guò)pip裝好包以后,在pycharm中導(dǎo)入包時(shí),依然會(huì)報(bào)錯(cuò),下面這篇文章主要給大家介紹了關(guān)于python使用pip成功導(dǎo)入庫(kù)后還是報(bào)錯(cuò)的解決方法,需要的朋友可以參考下
    2022-07-07
  • python爬蟲之requests庫(kù)的使用詳解

    python爬蟲之requests庫(kù)的使用詳解

    這篇文章主要為大家介紹了python爬蟲之requests庫(kù)的使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • Python pandas 計(jì)算每行的增長(zhǎng)率與累計(jì)增長(zhǎng)率

    Python pandas 計(jì)算每行的增長(zhǎng)率與累計(jì)增長(zhǎng)率

    這篇文章主要介紹了Python pandas 計(jì)算每行的增長(zhǎng)率與累計(jì)增長(zhǎng)率,文章舉例詳細(xì)說(shuō)明。需要的小伙伴可以參考一下
    2022-03-03
  • 梯度下降法介紹及利用Python實(shí)現(xiàn)的方法示例

    梯度下降法介紹及利用Python實(shí)現(xiàn)的方法示例

    梯度下降算法是一個(gè)很基本的算法,在機(jī)器學(xué)習(xí)和優(yōu)化中有著非常重要的作用,下面這篇文章主要給大家介紹了關(guān)于利用Python實(shí)現(xiàn)梯度下降法的相關(guān)資料,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-07-07
  • Pandas通過(guò)index選擇并獲取行和列

    Pandas通過(guò)index選擇并獲取行和列

    本文主要介紹了Pandas通過(guò)index選擇并獲取行和列,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • python 如何把docker-compose.yaml導(dǎo)入到數(shù)據(jù)庫(kù)相關(guān)條目里

    python 如何把docker-compose.yaml導(dǎo)入到數(shù)據(jù)庫(kù)相關(guān)條目里

    這篇文章主要介紹了python 如何把docker-compose.yaml導(dǎo)入到數(shù)據(jù)庫(kù)相關(guān)條目里?下面小編就為大家介紹一下實(shí)現(xiàn)方式,一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • Python入門教程4. 元組基本操作

    Python入門教程4. 元組基本操作

    這篇文章主要介紹了Python元組基本操作,簡(jiǎn)單介紹了元組的創(chuàng)建、count方法元素統(tǒng)計(jì)、index方法元素獲取等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-10-10
  • Python中利用aiohttp制作異步爬蟲及簡(jiǎn)單應(yīng)用

    Python中利用aiohttp制作異步爬蟲及簡(jiǎn)單應(yīng)用

    asyncio可以實(shí)現(xiàn)單線程并發(fā)IO操作,是Python中常用的異步處理模塊。這篇文章主要介紹了Python中利用aiohttp制作異步爬蟲的相關(guān)知識(shí),需要的朋友可以參考下
    2018-11-11
  • python實(shí)習(xí)總結(jié)(yeild,async,azwait和協(xié)程)

    python實(shí)習(xí)總結(jié)(yeild,async,azwait和協(xié)程)

    今天是Python實(shí)習(xí)的第一天,熟悉了環(huán)境,第一次使用macbook,氛圍還不錯(cuò),努力學(xué)習(xí)新知識(shí),希望本片文章能給你帶來(lái)幫助
    2021-10-10

最新評(píng)論