Python Flet: Личный кабинет в GUI приложении

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

Создание страницы личного кабинета

Скопируем существующую страницу (например, panel) и вставим её ниже. Изменим имя на panel_cabinet. Пока оставим только текст «Личный кабинет», удалив все дополнительные поля и кнопки.

Добавление вкладки в навигацию и отображение списка пользователей

Добавим вкладку «Кабинет» в навигационную панель, но только после успешной авторизации пользователя. Для этого используем функцию is_user_authenticated(). При успешной авторизации, добавим новую вкладку с помощью метода append(). Вкладка будет содержать иконку (например, книжку), текст «Кабинет», и изменённую иконку (selected_icon) при выборе. Также создадим flet.ListView для отображения списка пользователей.

if is_user_authenticated():
    if len(page.navigation_bar.destinations) == 2:  # Добавляем только если есть регистрация и авторизация
        page.navigation_bar.destinations.append(
            flet.NavigationDestination(
                icon=flet.icons.BOOK,
                selected_icon=flet.icons.BOOKMARK,
                label="Кабинет",
            )
        )

users_list = flet.ListView(
    expand=True,
    spacing=10,
    padding=20,
    controls=[] # Инициализируем пустым списком
)

Загрузка данных из базы данных

Заменим временный заполнитель списка на данные из базы данных. Подключимся к базе данных, создадим курсор и выполним запрос SELECT * FROM users. Используем функцию fetch_all() для получения всех пользователей. После получения данных, переберём записи и выведем имя пользователя (user[1]).

db = sqlite3.connect('users.db')
cursor = db.cursor()
cursor.execute('SELECT * FROM users')
res = cursor.fetchall()
if res:
    for element in res:
        users_list.controls.append(
            flet.Row(
                controls=[
                    flet.Text(element[1]), # Вывод имени пользователя
                    flet.Icon(flet.icons.PERSON),
                ]
            )
        )
db.close()

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

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

Что будем искать? Например,программа