91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Sanic框架異常處理與中間件操作的示例分析

發布時間:2021-08-19 14:25:37 來源:億速云 閱讀:159 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Sanic框架異常處理與中間件操作的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

簡介

Sanic是一個類似Flask的Python 3.5+ Web服務器,它的寫入速度非常快。除了Flask之外,Sanic還支持異步請求處理程序。這意味著你可以使用Python 3.5中新的閃亮的異步/等待語法,使你的代碼非阻塞和快速。

前言Sanic最低支持Python 3.5,如果需要學習Sanic,請先下載版本不低于3.5的Python包

異常

異常可以從請求處理程序中拋出,并由Sanic自動處理。異常將消息作為第一個參數,并且還可以將狀態碼傳回HTTP響應中。

拋出異常:手動產生異常的方式,有過Python基礎的都知道,可以使用raise來產生一個異常:

from sanic.exceptions import ServerError
from sanic.response import text
@app.route("/get_exception")
async def get_exception(request):
  raise ServerError("it is error",status_code=500)

你也可以使用abort:

from sanic.exceptions import abort
from sanic.response import text
@app.route("/get_exception")
async def get_exception(request):
  abort(402)
  text("ok")

處理異常:有時我們需要對一些特殊異常做特殊處理,此時我們可以用到@app.exception裝飾器,然后在定義一個異常函數來進行處理。異常裝飾器處理函數必須以一個RequestException對象作為參數:

from sanic.response import text
from sanic.exceptions import NotFound
@app.exception(NotFound)
async def not_found_exception(request,exception):
  return text("not found=>{}".format(request.url))

中間件

中間件是服務器在請求之前或之后執行的功能,他們可以用來修改修改用戶定義處理函數的請求或相應。Sanic提供兩種類型的中間件:請求和響應。兩者都是使用@app.middleware裝飾器聲明,兩個裝飾器分別需要傳入一個代表其類型的參數:requestresponse,下面舉一個簡單的栗子:

from sanic.response import text
@app.route("/get_info")
async def get_info(request):
  print(request.url)
  return text("it is ok!")
@app.middleware("request")
async def get_request_middleware(request):
  print("請求中間件")
@app.middleware("response")
async def get_response_middleware(request,response):
  print("響應中間件")

當我們訪問/get_info請求時,打印結果將會是這樣的:

請求中間件

http://localhost:5000/get_info

響應中間件

值得注意的是,如果是響應中間的處理函數,除了需要傳遞一個request對象參數,還需要傳遞一個response對象參數。從結果可以看出,request中間件是在接收到請求時立馬觸發的,而response中間件是在接收到響應時立馬觸發的。針對這兩者的特性,我們可以進行一些特殊的操作,來達到我們的目的:

@app.middleware("request")
async def get_request_middleware(request):
  request.args.update({"name":"laozhang"})
@app.middleware("response")
async def get_response_middleware(request,response):
  response.headers["name"] = "laozhang"

將所有的請求的args添加一條name=laozhang,并且在響應頭中添加name=laozhang

監聽器

如果需要在服務器啟動/關閉的時候,執行一些特殊的代碼,則可以使用以下監聽器:

  • before_server_start:在服務器啟動之前執行

  • after_server_start:在服務器啟動之后執行

  • before_server_stop:在服務器關閉之前執行

  • after_server_stop:在服務器關閉之后執行

舉個栗子:

@app.listener("before_server_start")
async def before_server_start(request,loop):
  print("before_server_start")
@app.listener("after_server_start")
async def after_server_start(request,loop):
  print("after_server_start")
@app.listener("before_server_stop")
async def before_server_stop(request,loop):
  print("before_server_stop")
@app.listener("after_server_stop")
async def after_server_stop(request,loop):
  print("after_server_stop")

現在先啟動服務,而后關閉,發現執行的順序將會是這樣:

before_server_start
after_server_start
before_server_stop
after_server_stop

關于“Sanic框架異常處理與中間件操作的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湟源县| 惠东县| 陵水| 文昌市| 正定县| 时尚| 阳曲县| 巴林左旗| 台安县| 遂宁市| 饶平县| 双鸭山市| 广西| 集贤县| 琼结县| 克山县| 类乌齐县| 原阳县| 永德县| 和林格尔县| 濮阳市| 东乡| 新余市| 吉首市| 轮台县| 金坛市| 安化县| 天柱县| 贵州省| 攀枝花市| 九寨沟县| 简阳市| 佛冈县| 滨州市| 宁武县| 苗栗县| 敦煌市| 虞城县| 牡丹江市| 临城县| 永川市|