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

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

 更新時間:2018年07月16日 11:21:14   作者:噴跑的豆子  
這篇文章主要介紹了Sanic框架異常處理與中間件操作,結合實例形式較為詳細的分析了Sanic框架拋出異常、異常處理、中間件、監(jiān)聽器相關原理與操作技巧,需要的朋友可以參考下

本文實例講述了Sanic框架異常處理與中間件操作。分享給大家供大家參考,具體如下:

簡介

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

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

異常

異??梢詮恼埱筇幚沓绦蛑袙伋?,并由Sanic自動處理。異常將消息作為第一個參數,并且還可以將狀態(tài)碼傳回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))

中間件

中間件是服務器在請求之前或之后執(zhí)行的功能,他們可以用來修改修改用戶定義處理函數的請求或相應。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中間件是在接收到請求時立馬觸發(fā)的,而response中間件是在接收到響應時立馬觸發(fā)的。針對這兩者的特性,我們可以進行一些特殊的操作,來達到我們的目的:

@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

監(jiān)聽器

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

  • before_server_start:在服務器啟動之前執(zhí)行
  • after_server_start:在服務器啟動之后執(zhí)行
  • before_server_stop:在服務器關閉之前執(zhí)行
  • after_server_stop:在服務器關閉之后執(zhí)行

舉個栗子:

@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")

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

before_server_start
after_server_start
before_server_stop
after_server_stop

更多關于Python相關內容可查看本站專題:《Python入門與進階經典教程》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設計有所幫助。

相關文章

  • 如何通過python實現人臉識別驗證

    如何通過python實現人臉識別驗證

    這篇文章主要介紹了如何通過python實現人臉識別驗證,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • Pycharm中SQL語句提示SQL Dialect is Not Configured的解決

    Pycharm中SQL語句提示SQL Dialect is Not Config

    這篇文章主要介紹了Pycharm中SQL語句提示SQL Dialect is Not Configured的解決方案,具有很好的參考價值,希望對大家有所幫助。
    2022-07-07
  • TensorFlow梯度求解tf.gradients實例

    TensorFlow梯度求解tf.gradients實例

    今天小編就為大家分享一篇TensorFlow梯度求解tf.gradients實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python腳本之一鍵移動自定格式文件方法實例

    python腳本之一鍵移動自定格式文件方法實例

    這篇文章主要給大家介紹了關于python腳本之一鍵移動自定格式文件的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • Python利用py-redis實現分布式鎖

    Python利用py-redis實現分布式鎖

    隨著業(yè)務的增長,后端技術架構會慢慢的從單體服務轉向多服務或者微服務的分布式架構,本文主要為大家介紹了如何利用Py-Redis實現簡單的分布式鎖,需要的可以參考一下
    2023-08-08
  • python GUI實現小球滿屏亂跑效果

    python GUI實現小球滿屏亂跑效果

    這篇文章主要為大家詳細介紹了python GUI實現小球滿屏亂跑效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 基于python實現rpc遠程過程調用

    基于python實現rpc遠程過程調用

    本文主要介紹了基于python實現rpc遠程過程調用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • Python+tkinter實現音樂下載軟件的制作

    Python+tkinter實現音樂下載軟件的制作

    平常我們下載的歌曲,都是各種妖魔鬼怪的格式橫行,想下載下來用一下都不行,還只能在它的播放器內聽,這誰受得了~本文就來用Python制作個音樂下載軟件,需要的可以參考一下
    2022-09-09
  • 對Keras自帶Loss Function的深入研究

    對Keras自帶Loss Function的深入研究

    這篇文章主要介紹了對Keras自帶Loss Function的深入研究,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python中偏函數partial用法實例分析

    python中偏函數partial用法實例分析

    這篇文章主要介紹了python中偏函數partial用法,實例分析了偏函數partial的功能、定義及使用方法,需要的朋友可以參考下
    2015-07-07

最新評論

安丘市| 青岛市| 平定县| 聊城市| 城固县| 阿勒泰市| 沙雅县| 黄冈市| 河津市| 毕节市| 和顺县| 洮南市| 永兴县| 乐业县| 白河县| 漾濞| 定兴县| 遂川县| 四川省| 凭祥市| 贵阳市| 普兰县| 沙坪坝区| 鹿泉市| 三原县| 克拉玛依市| 江津市| 湖北省| 佛山市| 六安市| 临城县| 綦江县| 漠河县| 镇坪县| 盐边县| 商城县| 孝昌县| 交城县| 普宁市| 板桥市| 长沙县|