五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動(dòng)態(tài)

Python Flask請(qǐng)求擴(kuò)展與中間件相關(guān)知識(shí)總結(jié)

發(fā)布日期:2022-03-13 15:55 | 文章來(lái)源:腳本之家

一、請(qǐng)求擴(kuò)展

1.before_request

作用: 類比django中間件中的process_request,在請(qǐng)求到來(lái)執(zhí)行路由函數(shù)之前先執(zhí)行. 但是如果有多個(gè)順序是從上往下執(zhí)行.

應(yīng)用: 基于它做用戶登錄認(rèn)證

注意: 如果before_request的返回值不是None的清空下, 返回的而是別的值, 那么后續(xù)的請(qǐng)求都不會(huì)執(zhí)行,本次請(qǐng)求直接返回, 如果定義了after_request那么會(huì)接著它執(zhí)行, 最終本次請(qǐng)求響應(yīng)結(jié)束.

@app.before_request
def process_request(*args,**kwargs):
 if request.path == '/login':
  return None
 user = session.get('user_info')
 if user:
  return None
 return redirect('/login') 

2.after_request

作用: 類比django中間件中的process_response,如果請(qǐng)求沒(méi)有出現(xiàn)異常的情況下, 會(huì)在請(qǐng)求返回return之前執(zhí)行. 但是如果有多個(gè)順序是從下往上執(zhí)行.

@app.after_request  # 后執(zhí)行
def process_response1(response):
 print('process_response1 走了')
 return response
@app.after_request  # 先執(zhí)行
def process_response2(response):
 print('process_response2 走了')
 return response

3.before_first_request

作用: 項(xiàng)目啟動(dòng)起來(lái)接收到第一次請(qǐng)求時(shí)執(zhí)行.

應(yīng)用: 項(xiàng)目初始化用來(lái)保證以后項(xiàng)目只要不重啟就不再繼續(xù)執(zhí)行.

@app.before_first_request
def first():
 print('我的第一次')

4. teardown_request

作用: 在每一個(gè)路由函數(shù)執(zhí)行完畢之后執(zhí)行,即使遇到了異常也會(huì)執(zhí)行. (提示: 返回reutrn沒(méi)有任何的效果, 不能控制返回的結(jié)果)

應(yīng)用: 記錄日志

@app.teardown_request  
def ter(e):  # e就是上一個(gè)路由函授執(zhí)行過(guò)程中出現(xiàn)被捕獲的異常信息.
 print(e)
 print('我是teardown_request ')

5.errorhandler

作用: 綁定錯(cuò)誤的狀態(tài)碼進(jìn)而可以捕獲服務(wù)器的錯(cuò)誤, 并返回對(duì)應(yīng)的錯(cuò)誤頁(yè)面.

@app.errorhandler(500)
def error_500(arg):
 return render_template('error.html', message='500錯(cuò)誤')

@app.errorhandler(404)
def error_404(arg):
 return render_template('error.html', message='404錯(cuò)誤')

6.template_global

作用: 全局的標(biāo)簽, 在任意的html頁(yè)面中就可以直接使用, 不需要在render_template中傳遞參數(shù)以后才能使用.

@app.template_global()
def sb(a1, a2):
 return a1 + a2
# html頁(yè)面中直接使用, 不需要傳遞參數(shù).
{{ sb(1,2) }}

7.template_filter

@app.template_filter()
def db(a1, a2, a3):
 return a1 + a2 + a3
# html頁(yè)面中直接使用, 不需要傳遞參數(shù). 其中1傳遞給a1, 2傳遞給a2, 3傳遞給a3. (提示: Django中的過(guò)濾器最多只可以傳遞二個(gè)參數(shù))
{{ 1|db(2,3) }}

總結(jié):

1.重點(diǎn)掌握before_requestafter_request

2.注意有多個(gè)的情況,執(zhí)行順序

3.before_request請(qǐng)求攔截后(也就是有return值),response所有都執(zhí)行

二、中間件

class Md(object):
 def __init__(self, old_wsgi_app):
  self.old_wsgi_app = old_wsgi_app
 def __call__(self, environ, start_response):
  print('開(kāi)始之前')
  ret = self.old_wsgi_app(environ, start_response)
  print('結(jié)束之后')
  return ret

if __name__ == '__main__':
 # 1. 我們發(fā)現(xiàn)當(dāng)執(zhí)行app.run方法的時(shí)候,最終執(zhí)行run_simple,最后執(zhí)行app(),也就是在執(zhí)行app.__call__方法
 # 2. 在__call__里面,執(zhí)行的是self.wsgi_app().那我們希望在執(zhí)行他本身的wsgi之前做點(diǎn)事情。
 # 3. 所以我們先用Md類中__init__,保存之前的wsgi,然后我們用將app.wsgi轉(zhuǎn)化成Md的對(duì)象。
 # 4. 那執(zhí)行新的的app.wsgi_app,就是執(zhí)行Md的__call__方法。
 # 5. 最后把原來(lái)的wsgi_app替換為自定義的
 app.wsgi_app = Md(app.wsgi_app)
 app.run()

到此這篇關(guān)于Python Flask請(qǐng)求擴(kuò)展與中間件相關(guān)知識(shí)總結(jié)的文章就介紹到這了,更多相關(guān)Flask請(qǐng)求擴(kuò)展與中間件內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

美國(guó)服務(wù)器租用

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開(kāi)通

自選配置、實(shí)時(shí)開(kāi)通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問(wèn)服務(wù)

1對(duì)1客戶咨詢顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部