如何通过 Plotly 从 Dash 中的回调函数访问 cookie?
How to access a cookie from callback function in Dash by Plotly?
我有一个简单的 Dash 回调函数,如下所示:
@app.callback(
dash.dependencies.Output('test_output', 'children'),
[dash.dependencies.Input('test_input', 'value')]):
def process(val):
return html.Div('test')
现在我要设置一些 cookie。正如我们在 Dash 的源代码中看到的那样,包装函数使用序列化的返回数据生成普通的 Flask Response 对象:
def wrap_func(func):
def add_context(*args, **kwargs):
output_value = func(*args, **kwargs)
response = {
'response': {
'props': {
output.component_property: output_value
}
}
}
return flask.Response(
json.dumps(response,
cls=plotly.utils.PlotlyJSONEncoder),
mimetype='application/json'
)
self.callback_map[callback_id]['callback'] = add_context
return add_context
所以如果这段代码是我项目的一部分,我会在这里使用 Response.set_cookie
。
会话的情况似乎有所不同 - 我可以从导致修改 session
cookie 的包装函数访问和修改会话对象。
如何从 Dash 回调中设置和获取 cookie?也许 Flask 有办法在不直接创建 Response 对象的情况下做这样的事情?
更新
我为此创建了一个问题:
https://github.com/plotly/dash/issues/182
并请求添加此功能:
https://github.com/plotly/dash/pull/183
您正在寻找的功能最终合并到:
https://github.com/plotly/dash/pull/623(2019 年 3 月 4 日)
他们关于如何设置 cookie 的示例如下所示:
@app.callback(Output('output', 'children'), [Input('input', 'value')])
def update_output(value):
dash.callback_context.response.set_cookie(
'dash cookie', value + ' - cookie')
return value + ' - output'
我有一个简单的 Dash 回调函数,如下所示:
@app.callback(
dash.dependencies.Output('test_output', 'children'),
[dash.dependencies.Input('test_input', 'value')]):
def process(val):
return html.Div('test')
现在我要设置一些 cookie。正如我们在 Dash 的源代码中看到的那样,包装函数使用序列化的返回数据生成普通的 Flask Response 对象:
def wrap_func(func):
def add_context(*args, **kwargs):
output_value = func(*args, **kwargs)
response = {
'response': {
'props': {
output.component_property: output_value
}
}
}
return flask.Response(
json.dumps(response,
cls=plotly.utils.PlotlyJSONEncoder),
mimetype='application/json'
)
self.callback_map[callback_id]['callback'] = add_context
return add_context
所以如果这段代码是我项目的一部分,我会在这里使用 Response.set_cookie
。
会话的情况似乎有所不同 - 我可以从导致修改 session
cookie 的包装函数访问和修改会话对象。
如何从 Dash 回调中设置和获取 cookie?也许 Flask 有办法在不直接创建 Response 对象的情况下做这样的事情?
更新
我为此创建了一个问题: https://github.com/plotly/dash/issues/182
并请求添加此功能: https://github.com/plotly/dash/pull/183
您正在寻找的功能最终合并到: https://github.com/plotly/dash/pull/623(2019 年 3 月 4 日)
他们关于如何设置 cookie 的示例如下所示:
@app.callback(Output('output', 'children'), [Input('input', 'value')])
def update_output(value):
dash.callback_context.response.set_cookie(
'dash cookie', value + ' - cookie')
return value + ' - output'