使用Sanic開發快速異步響應的Web程序

python學習筆記整理於猿人學網站的python教程python爬蟲html

Sanic是一個相似Flask、僅僅支持Python 3.5+ 版本的web 服務器,旨在運行速度更快。在相似Flask的基礎上,Sanic支持異步請求處理,也就是說,你能夠使用Python 3.5 中全新而又亮眼的 async/await 語法,使你的代碼非阻塞且快速。python

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

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的基本用法:web

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

Blueprint

若是網站很複雜,路由路徑不少,所有寫在一個文件裏面會比較複雜,這時候能夠使用Blueprint,把不一樣功能寫到不一樣blueprint文件裏面,讓整個代碼結構邏輯更清晰sql

Class-Based Views

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

Jinja網頁模板

Jinja具備快速強大的html模板渲染能力,是不少Python Web框架首選的html模板處理器。Sanic沒有實現本身的模板處理,但能夠把Jinja融入進來: sanic_jinja2json

i18n國際化處理

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

小技巧:babel

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

在一個循環裏爲每種語言註冊該路徑:

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

相關文章
相關標籤/搜索