編程學習網 > 編程語言 > Python > 使用 Sanic 框架進行 Python Web 開發教程
2023
08-24

使用 Sanic 框架進行 Python Web 開發教程

作為一款異步 Python 3.7+ web 框架,Sanic 最基本的構建塊是 Python 標準庫中的 asyncio 模塊。


2014 年初發布的 Python 3.4 是在新添加的 asyncio 模塊中將協程概念引入標準庫的第一步。使用標準的 Python 生成器,可以在發生其他事情時暫停函數的執行,然后可以將數據注入該函數以使其恢復執行。如果那時有一個對象“循環”通過需要工作的任務列表,我們可以同時進入和退出多個函數的執行。這可以在單個線程中實現“并發”,并且是 asyncio 思想的基礎。

快速瀏覽一下 Python 3.4 中的異步編程是什么樣的:

import asyncio

@asyncio.coroutine
def get_value():
    yield from asyncio.sleep(1)
    return 123

@asyncio.coroutine
def slow_operation():
    value = yield from get_value()
    print(">>", value)
    
loop = asyncio.get_event_loop()
loop.run_until_complete(slow_operation())
loop.close()
運行結果:DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead,可以看到 Python 3.8 中這種使用方式被取消了。

現在的用法是使用 async def 開頭:

import asyncio
import time

async def say_after(delay, what):
    await asyncio.sleep(delay)
    print(what)

async def main():
    print(f"started at {time.strftime('%X')}")

    await say_after(1, 'hello')
    await say_after(2, 'world')

    print(f"finished at {time.strftime('%X')}")

asyncio.run(main())
輸出結果:

started at 23:39:52
hello
world
finished at 23:39:55
新的 asyncio 模塊的語言和語法都非常強大,但有點笨拙。對于經驗不足的 Python 開發人員來說,生成器通常有點神秘和困難。收益究竟來自什么?這東西對很多人來說都是陌生的;Python 需要更好的語法。

Sanic 框架
經典的 Django 和 Flask 是一種同步的框架,而沒有一種異步框架。

2016 年夏天,Sanic 的誕生就是為了探索這個差距。這個想法很簡單:我們可以從 Flask 中獲取一個帶有看起來很簡單的 API 的應用程序并使其異步/等待嗎?

不知何故,這個想法起飛并獲得了認可。這不是一個最初以重做 Python 應用程序處理 Web 請求的方式為目標的項目。這在很大程度上是一個意外暴露的案例。該項目迅速爆發并引起了轟動。讓 Flask 采用這種新模式有很大的吸引力。但是,由于 Flask 本身無法做到這一點,所以很多人認為 Sanic 可能是 Flask 的異步版本。

開發人員很高興有機會使用最新的 Python 為他們的應用程序帶來全新的性能水平。

Sanic 的目的:提供一個簡單的方法來啟動和運行一個高性能的HTTP服務器,該服務器易于構建、擴展,并最終擴展。

Sanic的口號是。"快速建設??焖龠\行"(Build fast.Run fast)。這當然強調了項目的性能導向。它也說明了一個目標,即在Sanic中構建一個應用程序是為了讓人感到直觀。啟動和運行一個應用程序不應該意味著要學習一套復雜的API,并且要不斷地打開第二個瀏覽器窗口查看文檔。當其他工具大量使用 "黑匣子 "式的功能,如全局變量、"魔法 "導入和猴子補丁時,Sanic通常更傾向于朝編寫好的、干凈的和習慣性的 Python(又稱pythonic代碼)方向發展。如果你知道 Python,你可以用 Sanic 構建一個網絡 API。

比如我們來看一個簡單的 Hello World例子。

Hello World Example
首先使用 pip3 install sanic 命令安裝 sanic 模塊。

Installing collected packages: aiofiles, websockets, httptools, sanic-routing, multidict, sanic
Successfully installed aiofiles-0.8.0 httptools-0.4.0 multidict-6.0.2 sanic-22.3.0 sanic-routing-22.3.0 websockets-10.2
Sanic() 是最基礎的組成部分,通常我們會在一個名為 server.py 的文件中將其實例化,當然文件名稱并不是必須的, 但是我們還是推薦使用 server.py 做為文件名稱來實例化 Sanic 對象。

from sanic import Sanic
from sanic.response import json

app = Sanic("MyHelloworldapp")

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

if __name__ == '__main__':
    app.run()  
Sanic 通過 sanic server.app 命令來運行:


以上就是使用 Sanic 框架進行 Python Web 開發教程的詳細內容,想要了解更多Python教程歡迎持續關注編程學習網。

掃碼二維碼 獲取免費視頻學習資料

Python編程學習

查 看2022高級編程視頻教程免費獲取