2

我有一个简单的 Dash 回调函数,如下所示:

@app.callback(
    dash.dependencies.Output('test_output', 'children'),
    [dash.dependencies.Input('test_input', 'value')]):
def process(val):
    return html.Div('test')

现在我要设置一些cookies。正如我们在 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在这里使用。

会话的情况似乎有所不同——我可以从导致修改sessioncookie 的包装函数访问和修改会话对象。

如何从 Dash 回调中设置和获取 cookie?也许 Flask 有办法在不直接创建 Response 对象的情况下做这样的事情?

更新

我为此创建了一个问题: https ://github.com/plotly/dash/issues/182

并请求添加此功能: https ://github.com/plotly/dash/pull/183

4

1 回答 1

4

您正在寻找的功能最终合并到: 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'
于 2019-05-17T15:21:05.810 回答