異步處理的框架Sanic的使用方法和小技巧


Sanic是異步處理的框架,運用Sanic可以開發快速異步響應的web程序。想必大家看到這個都會比較期待和興奮。

那么如何使用Sanic來實現快速響應呢?我們先來看一看Sanic的基本介紹。

Sanic類似Flask、只支持Python 3.5+ 版本的web 服務器,運行速度更快。在類似Flask的基礎上,Sanic支持異步請求處理,你可以使用Python 3.5 中全新而又亮眼的 async/await 語法,使你的代碼快速。

下面是一個最簡單的Sanic Web 程序:

from sanic import Sanic
from sanic.response import json

app = Sanic()

@app.route("/")
async def test(request):
return json({"hello": "world"})

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)

 

以上代碼顯示了Sanic的基本用法:

  • 全局生成一個Sanic對象:app = Sanic()
  • Web路由由裝飾器@app.route()管理,也可以通過url_for()、add_route()指定(詳見文檔)
  • 請求響應函數用async聲明進行異步處理,輸入必須有request對象,返回response對象

什么時候使用Blueprint?

如果網站很復雜,路由路徑很多,全部寫在一個文件里面會比較復雜,這時候可以使用Blueprint,把不同功能寫到不同blueprint文件里面,讓整個代碼結構邏輯更清晰

Class-Based Views

如果你用過tornado,一定對它用類處理請求的方式印象深刻,對同一個路由路徑分別處理GET、POST、DETET等請求方式時,只要實現該類的幾個不同方法即可,讓整個代碼的邏輯結構更清晰。同樣,Sanic也提供了基於類的處理方式: HTTPMethodView

Jinja網頁模板強大功能

Jinja具有快速強大的html模板渲染能力,是很多Python Web框架首選的html模板處理器。Sanic沒有實現自己的模板處理,但可以把Jinja融入進來: sanic_jinja2

i18n國際化處理

Web網站經常要同時支持多種語言,這個時候就要遇到國際化處理的問題,這方便也有模塊把Babel集成進來: sanic_babel

小技巧:

你針對路由路徑 ‘/product’ 寫了Blueprint bp_product, 但要支持en, zh, jp三種語言路徑,即: /en/product, /zh/product, /jp/product, 你該怎么做呢?

在一個循環里為每種語言注冊該路徑:

for lang in ['en', 'zh', 'jp']:

    app.blueprint(bp_product, url_prefix='/%s' % lang)

MySQL讀寫

Sanic是異步處理的框架,讀寫數據庫MySQL當然也要用異步IO的方式,才能體系異步的高效。aiomysql就是基於pymysql實現的異步讀寫MySQL的數據庫模塊,同樣有模塊為sanic因一波封裝了aiomysql,使得MySQL讀寫更加方便,它就是: sanicdb

看完是不是覺得很厲害的樣子,頭腦有沒有靈光閃顯的感jio?

 

 

 

文章首發於我的技術博客猿人學Python基礎教程 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM