Sanic框架初識

veelion發表於2019-03-21

Sanic 既是一個Python web 伺服器,又是一個web框架,它為速度而生。Sanic只支援Python 3.5及其以上版本,允許我們使用async/await語法來使我們的程式碼非阻塞且快速。

初識sanic

通過pip安裝Sanic

pip3 install sanic

Sanic 使用uvloopujson來提高效能。但是,目前Windows上不支援uvloop,只能使用asnycio原生的事件迴圈。不過不影響你在Windows上使用Sanic,不用擔心這個問題,如果想深入瞭解 它就去看看Sanic的原始碼中server.pyworker.py。其實,就是在程式碼中import uvloop時處理了ImportError異常。

如果你不喜歡這兩個包,可以通過設定環境變數SANIC_NO_UVLOOP=trueSANIC_NO_UJSON=true來禁止安裝它們。

$ export SANIC_NO_UVLOOP=true
$ export SANIC_NO_UJSON=true
$ pip3 install sanic

Sanic簡單示例

sanic 介紹

下面是一個最簡單的Sanic web 應用,寫入檔案app-simple.py

# file: app-simple.py
from sanic import Sanic
from sanic.response import json

app = Sanic()

@app.route('/')
async def test(request):
    msg = {'message': 'Welcom to 猿人學Python'}
    return json(msg, ensure_ascii=False)

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8888)

在命令列下執行這個web app:

python3 app-simple.py

執行成功可以看到如下輸出:

[2019-03-21 21:29:57 +0800] [10766] [INFO] Goin' Fast @ http://127.0.0.1:8888
[2019-03-21 21:29:57 +0800] [10766] [INFO] Starting worker [10766]

用瀏覽器或curl訪問http://127.0.0.1:8888,就可以看到輸出結果。下面是命令curl -i http://127.0.0.1:8888的結果:

HTTP/1.1 200 OK
Connection: keep-alive
Keep-Alive: 5
Content-Length: 39
Content-Type: application/json

{"message":"Welcom to 猿人學Python"}

Sanic示例詳解

(1)首先,從sanic包匯入Sanic類,這個是一個Sanic web app (web應用)的入口類。根據我們app的響應資料型別從sanic.response匯入相應的響應函式,比如本例中的json()

(2)接著,生成一個Sanic的例項app

(3)app例項有兩個最常用的方法app.route()app.run()app.route()是一個裝飾器,通過它定義我們app的訪問路徑(路由),比如本例中的test()函式就是用來響應根路徑:/

通過@app.route()可以定義整個web app的各種路由。

(4)最後,通過app.run()方法來執行app,開啟一個web服務。

使用Sanic開發web應用的過程就是這麼簡單。如果開發複雜的網站,就是不斷重複第三步,並使用blueprint來使程式碼結構更清晰。後面,我們將一一介紹使用Sanic開發網站的方方面面。你準備好了嗎,讓我們一起開啟Sanic開發之旅吧!

猿人學banner宣傳圖

我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。

***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***