python sanic视频_Python Web框架Sanic 静态文件

本文介绍了如何在Python的Sanic框架中处理静态文件,包括使用`app.static()`方法注册静态文件路径,通过`url_for`创建URL,支持Blueprint以及处理大文件流。Sanic不提供静态文件夹的目录索引,但支持虚拟主机和流化大文件功能。
摘要由CSDN通过智能技术生成

我们在写web app(网站)的时候会用到很多静态文件,比如css,JavaScript,图片等,这些文件及其文件夹可以通过

app.static()

方法注册,从而被访问到。该方法有两个必需参数,节点URL和文件名。

800b36d33806e6fe3564c19bd694f6eb.png

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值