江湖小白之進階篇 (二)Sanic異步框架的搭建及基本使用

最近擺攤經濟被國家大力支持,抓住這波紅利,抓緊時間趕緊完成這篇的知識點內容,晚上選個好位置發展一下副業,買車買房就靠這一波了~~!

來,快速進入主題,我們進階篇的目的是開發一個在線提取及壓縮pdf文件的網站,在web端中不像是在c端有信息槽的機制,在web端中想實現實時信息接收,要不就是輪詢,要不就是用websocket,很明顯輪詢這種方式不太符合我們這種即將邁入中高級程序員的身份,那我們就選擇後者,在實現的過程中,pdf有可能較大,多頁的情況,在處理pdf文件的時候可能需要耗費一定的時間,在web端我們不可能提交一個請求就一直等待着最後結果的返回,理想的結果是我們提交了任務,就讓服務端自己在後臺運行,不要阻塞瀏覽器的操作,那這就是異步框架的優勢,所以綜上觀察,Sanic異步框架很適合我們目前需求的開發,那接下來我們就來搭建Sanic框架,它的框架和Flask框架在寫法上有驚人的相似之處,如果看過我之前章節的同學應該很容易就明白,沒看過的也沒關係,要使用我們就要先安裝它,很簡單執行一下下面的命令:

pip install sanic

安裝完成後,第一步我們還是打好基礎,創建項目目錄:

這裏的結構和Flask框架的一摸一樣,多了一個files文件夾是用來存放提取的PDF圖片文件的,首先我們來實現一下Sanic框架的“你好,美女!”(我已經對“Hello,world!”快要吐了),首先我們在run.py文件寫入:

#coding:utf-8
from sanic import Sanic
from sanic.response import text

#初始化
app = Sanic(__name__)

#定義路由實現首頁顯示
@app.route("/")
async def index(request):
    return text("你好,美女!")

if __name__ == "__main__":
    app.run(host="127.0.0.1", port=5000,debug=True)

從上面看是不是有種似曾相似燕歸來的趕腳,sanic.response中包含了一些常用的方法,比如text,json,html.file,stream,redirect等等方法,深入研究的可以去看看官方文檔,仔細一看是不是這裏有點區別:

request這是請求,在這裏一定要寫上,多了個async,這裏就是申明異步方法,我們來運行看看:

看見沒,Build Fast. Run Fast.這就是這個框架的特點,總結三個字:啥都快!來看看頁面的輸出:

嗯,就是怎麼簡單,那還是老規矩,我們來拆解下,部署到項目框架裏,

app/__init__.py:     app文件夾初始化文件

#coding:utf-8
from sanic import Sanic
app = Sanic(__name__)

from webpdf.app import main   #引入主文件

app/main.py:      主文件

#coding:utf-8
from webpdf.app import app
from sanic.response import text

@app.route("/")
async def index(request):
    return text("你好,美女!")

run.py: 執行文件

#coding:utf-8
from webpdf.app import app

if __name__ == "__main__":
    app.run(host="127.0.0.1", port=5000,debug=True)

拆分好了,這時候可能有童鞋要問了,那怎麼像flask那樣引用jinja2模版文件呢,這裏還需要安裝下:SanicJinja2

pip install sanic_jinja2

接着我們在main.py修改下:

#coding:utf-8
from webpdf.app import app
from sanic_jinja2 import SanicJinja2

#把app傳進去實例化jinja對象

jinja = SanicJinja2(app)

@app.route("/")
async def index(request):
    msg={"name":"李四","age":"18"}
    return jinja.render('index.html',request, msg=msg)

同樣我們在templates文件夾下創建一個index.html的文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
姓名:{{msg.name}}<br>
年齡:{{msg.age}}
</body>
</html>

來執行下:

這裏的模版頁默認路徑也是在templates下,那static靜態文件夾呢,這裏我們自己要定義下,在app/__init__.py文件中加入:

app.static('/static','app/static/')     #定義靜態資源文件夾路徑

app.static('/files','app/files/')         #提取pdf圖片存放的文件夾路徑

這樣我們就可以在模版頁中加載靜態資源文件了,引用方法跟flask一樣。

好了,由於急着去擺攤,針對Sanic框架的基本搭建及運用就先到這裏,下節接着說下Sanic如何實現異步非阻塞請求及websocket服務的實現。

人生和地攤一樣,錯過了擺地攤就錯過了人生,江湖不說再見,咱們下篇見!

關注公衆號,超越平凡才能成就自我

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章