1. 程式人生 > >sanic官方文檔解析之藍圖

sanic官方文檔解析之藍圖

tar serve 技術分享 ket 結束 部分 output 方法 1.3

1,藍圖(Blueprints)

技術分享圖片

藍圖可用於子路由的應用,代替增加路由的存在,藍圖的定義和增加路由的方法相似,靈活的在應用中註冊,並且可插拔的方式.

尤其是在大型應用中使用藍圖的時候在你邏輯打斷的地方或者是響應的地方

  • 1.1,第一個藍圖

技術分享圖片

接下來展示一個簡單的在你的應用程序中已經註冊了的處理管理員的視圖函數如上圖所示.

支持你保存到my_blueprint.py文件中,那將會是應用程序的入口.

  • 1.2,註冊藍圖

技術分享圖片

藍圖必須註冊到應用的程序中(和flask一毛一樣)

這樣將會增加在應用程序中的藍圖,並且通過藍圖註冊任何的定義路由,比如說在app.router中註冊的路由如上圖所示.

  • 1.3藍圖組和嵌套

技術分享圖片

藍圖也可以被註冊成列表或者元組的一部分,註冊遞歸循環的穿過子序列,並且通過藍圖註冊,藍圖組的方法被提供給進程,允許結構字典,模仿 前面的結束,考慮上邊的(人為的退出)例子:

  • 初始化應用程序的的層次如下所示:
from sanic import Blueprint

static = Blueprint("content_authors", url_prefix="/authors")

static1 = Blueprint("content_static", url_prefix="/static")

from sanic import Blueprint
from .static import static
from .authors import authors
content = Blueprint.group(static, authors, url_prefix="/content")  # 如果沒有特殊的要求,藍圖可以合並和寫

from .content import content
from .info import info

api = Blueprint.group(content, info, url_prefix="/api")


from sanic import Sanic
from .api import api

app = Sanic(__name__)

app.blueprint(api)  # 直接可以用實例化Sanic類中的blueprint方法
  • 1.4,使用藍圖

技術分享圖片

藍圖幾乎都有座位一個應用存在的功能

  • 1.5,Websocket路由

技術分享圖片

Websocket處理程序可以使用@bp.websocket裝飾器或者bp.add_websocket_route方法被註冊在藍圖裏

  • 1.6中間件

技術分享圖片

使用藍圖允許註冊到全局的中間件,實例如上圖所示.

  • 1.7異常

技術分享圖片

異常能夠專門被應用於全局的藍圖

  • 1.8,靜態文件

技術分享圖片

靜態文件可以在藍圖前綴下全局提供服務

  • 1.9啟動和暫停藍圖

技術分享圖片

在服務器可以運行藍圖函數在啟動和暫停服務的時候,如果是多進程模式運行,將會觸發這些程序運行

from sanic import Blueprint
import pymysql


# 實例化一個藍圖的對象
bq = Blueprint("my_blueprint")


@bq.listener("before_server_start")
async def setup_connection(app, loop):
    global database
    database = pymysql.connect(host="127.0.0.1", port=3306)


@bq.listener("after_server_stop")
async def close_connection(app, loop):
    await database.close() 

參數說明:

  • before_server_start:在服務啟動前執行連接數據庫
  • after_server_start:值服務器啟動後執行接通連接
  • before_server_stop:在服務器挺喜歡停止前執行接通連接
  • after_server_stop:在服務器停止後並且所有的請求已經完成執行

  • 1.10用url_for建立url

技術分享圖片

如果你希望為藍圖 設計一個路由,切記,采用以上的格式

sanic官方文檔解析之藍圖