У меня есть простая функция обратного вызова Dash, например:
@app.callback(
dash.dependencies.Output('test_output', 'children'),
[dash.dependencies.Input('test_input', 'value')]):
def process(val):
return html.Div('test')
А теперь я собираюсь установить куки. Как мы видим в исходном коде 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.
Как я могу установить и получить файлы cookie из обратного вызова Dash? Может быть, у Flask есть способ сделать это без прямого создания объекта Response?
ОБНОВЛЕНИЕ
Я создал проблему для этого: https://github.com/plotly/dash/issues/182
И запрос на добавление, чтобы добавить эту функциональность: https://github.com/plotly/dash/pull/183