Разблокировка силы сессии в Streamlit (1/2)

Разблокировка потенциала сессий в Streamlit (1/2)

Практический Пример

Изображение от streamlit

Введение

Streamlit быстро набирает популярность благодаря своей эффективности в создании веб-приложений с минимальными усилиями. Хотя Streamlit упрощает процесс создания интерактивных приложений, некоторым проектам может потребоваться более сложный функционал. В этой статье мы рассмотрим понятие “состояние сеанса” в Streamlit и проиллюстрируем его потенциал для создания приложений, конкурирующих с другими по функциональности и пользовательскому опыту.

Что такое состояние сеанса?

Прежде чем рассмотреть практические аспекты, важно полноценно понять концепцию состояния сеанса в пакете Streamlit.

Как указано в официальной документации:

Состояние сеанса – это способ обмена переменными между перезапусками для каждой сеанса пользователя. В дополнение к возможности сохранять и сохранять состояние, Streamlit также предоставляет возможность изменять состояние с использованием обратных вызовов. Состояние сеанса также сохраняется между приложениями внутри многостраничного приложения.

Почему в документации упоминаются “перезапуски”?

Чтобы быть максимально общим, ответ заключается в том, что каждый раз, когда пользователь взаимодействует с чем-либо (например, с кнопкой), код полностью перезапускается. При повторном выполнении кода могут измениться включенные переменные. В некоторых приложениях важно иметь возможность сохранять значения некоторых переменных между перезапусками и изменять их по требованию. Вот почему состояние сеанса важно. Это наше хранилище, которое сохраняет “информацию” между различными перезапусками.

Как использовать состояние сеанса?

Поэтому давайте сразу посмотрим на некоторый код импортирования необходимых библиотек:

import streamlit as st

Состояние сеанса можно легко получить, чтобы обновить его или создать новую переменную внутри:

st.session_state.data["test_var"] = True

В приведенном выше примере был добавлен новый ключ “data”, включающий значение “test_var” со значением True. Вы можете очень легко использовать эту новую переменную в своем коде, как и любую другую переменную:

st.text_input("Введите ваши данные:", session_state.data.test_var)

Применение состояния сеанса для сложного функционала

Использование состояния сеанса полезно для управления сессиями пользователей, обработки отправки форм и отслеживания состояния приложения через несколько компонентов. Пользователь имеет возможность генерировать условную логику, используя переменные состояния сеанса, что позволяет динамически изменять содержимое своего приложения.

В этом примере используются обратные вызовы. Давайте создадим простое приложение, которое может вычислять квадрат числа с помощью функции обратного вызова. Вот отрывок кода, демонстрирующий, как это можно сделать:

if "user_number" not in st.session_state:    st.session_state["user_number"] = 0if "square_result" not in st.session_state:    st.session_state["square_result"] = 0# Создаем функцию обратного вызоваdef calculate_square():    st.session_state["square_result"] = st.session_state.user_number**2# Создаем поле ввода числа пользователяst.session_state.user_number = st.number_input(    "Введите число:", value=st.session_state.user_number)# Добавляем кнопку для запуска расчетабатон = st.button("Вычислить квадрат", on_click=calculate_square)st.write(    f"Квадрат {st.session_state.user_number} равен {st.session_state.square_result}")

Вместо использования аргумента “on_click”, вы можете использовать что-то вроде ниже (в зависимости от ваших предпочтений программирования):

# Добавляем кнопку для запуска расчетаif st.button("Вычислить квадрат")    calculate_square()  

Пример приложения можно увидеть ниже:

Изображение от автора

Заключение

Используя функциональность состояния сессии Streamlit, разработчики могут улучшить функциональность и пользовательский опыт своих приложений для конкуренции с более сложными фреймворками. Используя возможности состояния сессии, можно повысить производительность и функциональность проектов Streamlit на более высокий уровень. Получите перворучный опыт в освоении потенциала разработки динамических и интерактивных приложений, которые оказывают глубокое влияние. Воспользуйтесь возможностью и начинайте занятия созданием выдающихся приложений, которые завораживают интерес и оказывают долговременное воздействие.