使用服务
本章介绍了ServiceData
的用法:
service = ServiceData(cache: CacheAbstract, service_name: str = "/cached-data", chunk_size: int = 1)
在dash
中使用service
service
主要用来为dash
提供服务。它实现了一种由callback加载、且由下载链接获取的“动态资源(dynamical assets)”。
service
的实例应当用作全局变量。换言之,该实例需要:
- 能被callback访问,这些callback负责存储数据到缓存。
- 能被
dash.Dash()
应用、在运行app.run()
之前访问。
对于服务的基础用法,如下所示:
use_service_dash.py
import io
import dash
from dash import Output, Input
import dash_file_cache as dfc
app = dash.Dash("demo")
service = dfc.ServiceData(dfc.CachePlain(1))
service.serve(app)
app.layout = ...
@app.callback(Output(..., "src"), Input(...))
def a_callback_creating_data(...):
fobj = io.BytesIO()
fobj.write(...) # 于此生成一些数据。
address = service.register(
fobj=fobj,
mime_type="image/svg+xml",
one_time_service=True,
)
return address
if __name__ == "__main__":
app.run()
对service
的使用可以分成三个步骤:
- 初始化后,调用
service.serve(app)
以将服务(flask.views.View
)绑定到应用上。 - 在callback中,调用
service.register(...)
,将数据动态地置入缓存中。 service.register(...)
的返回值是指向缓存数据的地址。该地址可以用作<img>
的src
属性或<object>
的data
属性。
不同于应用的静态资源(assets),service.register(...)
所返回的地址address
,具有严格限定在dashboard运行期间的生命周期。能取得返回值address
,即可确保数据已俟访问。
service.register(...)
有如下参数:
参数 | |
---|---|
fobj | 所要提供的数据路径、或类文件对象。 |
file_name | fobj 的文件名。只有download 参数指定时,才会用到该值。此时,该值将用作所下载文件的文件名。 |
content_type | 标记在HTML响应头中的内容类型。若该值留空,则将mime_type 用作content_type 。详情参见此处。 |
mime_type | 所要提供的文件媒体类型。每个文件都对应一种媒体类型,详情参见此处。媒体类型总表参见此处。 |
one_time_service | 二值量。标记有效时,会在文件送出之后,试图将文件清出缓存。设置该值可以节约缓存空间。 |
download | 二值量。标记有效时,返回的地址会被标记为用于下载文件。访问这样的地址会触发下载、而不是触发浏览器访问。 |
注意
若dashboard需要支持多用户同时访问、或缓存的数据需要访问多次时,不宜设置one_time_service=True
。