我們在寫web app(網站)的時候會用到很多靜態檔案,比如css,JavaScript,圖片等,這些檔案及其資料夾可以通過app.static()
方法註冊,從而被訪問到。該方法有兩個必需引數,節點URL和檔名。
from sanic import Sanic
from sanic.blueprints import Blueprint
app = Sanic(__name__)
# 提供資料夾`static`裡面的檔案到URL `/static`的訪問。
app.static('/static', './static')
# 使用`url_for`建立URL時,預設為'static'的`name`可被省略。
app.url_for('static', filename='file.txt') == '/static/file.txt'
app.url_for('static', name='static', filename='file.txt') == '/static/file.txt'
# 通過URL /the_best.png訪問檔案 /home/ubuntu/test.png
app.static('/the_best.png', '/home/ubuntu/test.png', name='best_png')
# 通過url_for建立靜態檔案URL
# 如果沒有定義name 和 filename 引數時可以省略它們。
# 如果上面沒有定義name='best_png',則下面的url_for可省略name引數
app.url_for('static', name='best_png') == '/the_best.png'
app.url_for('static', name='best_png', filename='any') == '/the_best.png'
# 需要為其它靜態檔案定義`name`
app.static('/another.png', '/home/ubuntu/another.png', name='another')
app.url_for('static', name='another') == '/another.png'
app.url_for('static', name='another', filename='any') == '/another.png'
# 同樣, 也可以對blueprint使用`static`
bp = Blueprint('bp', url_prefix='/bp')
bp.static('/static', './static')
bp.static('/the_best.png', '/home/ubuntu/test.png', name='best_png')
app.blueprint(bp)
app.url_for('static', name='bp.static', filename='file.txt') == '/bp/static/file.txt'
app.url_for('static', name='bp.best_png') == '/bp/test_best.png'
app.run(host="0.0.0.0", port=8000)
對blueprint使用url_for
建立的URL會加上/bp
字首。
注意: Sanic 不提供靜態資料夾的目錄索引。
虛擬主機
方法app.static()
支援虛擬主機。可以通過傳入host
引數實現。例如:
from sanic import Sanic
app = Sanic(__name__)
app.static('/static', './static')
app.static('/example_static', './example_static', host='www.example.com')
流化大檔案
有時候需要Sanic提供大檔案(比如,視訊,圖片等)的訪問,可以選擇使用流檔案替代直接下載。比如:
from sanic import Sanic
app = Sanic(__name__)
app.static('/large_video.mp4', '/home/ubuntu/large_video.mp4', stream_large_files=True)
當stream_large_files
為True
時,Sanic將會使用file_stream()
替代file()
來提供靜態檔案訪問。它預設的塊大小是1KB,當然你可以根據需要修改塊大小。比如:
from sanic import Sanic
app = Sanic(__name__)
chunk_size = 1024 * 1024 * 8 # 設定塊大小為 8KB
app.static('/large_video.mp4', '/home/ubuntu/large_video.mp4', stream_large_files=chunk_size)
我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。
***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***