Python Web框架Sanic 静态文件

发表时间:2020-02-18

我们在写web app(网站)的时候会用到很多静态文件,比如css,JavaScript,图片等,这些文件及其文件夹可以通过 app.static() 方法注册,从而被访问到。该方法有两个必需参数,节点URL和文件名。

Sanic 静态文件

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)

文章来源互联网,如有侵权,请联系管理员删除。邮箱:417803890@qq.com / QQ:417803890

微配音

Python Free

邮箱:417803890@qq.com
QQ:417803890

皖ICP备19001818号-4
© 2019 copyright www.pythonf.cn - All rights reserved

微信扫一扫关注公众号:

联系方式

Python Free