Исправление ошибки в базе данных
Перед началом работы необходимо исправить ошибку, связанную с базой данных. После выполнения команд SQL необходимо выполнить commit для сохранения изменений. Пропущенный ранее commit приводил к неработоспособности добавления пользователей. Приложение теперь будет включать регистрацию, авторизацию и личный кабинет, поэтому переименуем его в itbrogerApp.
Реализация системы авторизации
Код функции pageAdd (регистрация), отвечающий за создание элементов интерфейса регистрации, помещаем в переменную PanelRegister. Это позволит легко переключаться между страницами регистрации и авторизации. Создадим аналогичную переменную PanelHouse для страницы авторизации. Изменим кнопку ButtonRec на ButtonHouse и переименуем функцию обработки нажатия кнопки с register на AuthUser. Кнопка ButtonHouse изначально будет неактивна; её активность будет зависеть от ввода данных пользователем.
Функция авторизации AuthUser
Функция AuthUser выполняет следующие действия:
- Подключается к базе данных.
- Создаёт курсор.
- Выполняет запрос SELECT к таблице users, выбирая пользователей с совпадающими логином и паролем.
- Использует cursor.fetchone() для получения одного результата (ожидается только один пользователь с заданными логином и паролем).
- Если пользователь найден (fetchone() возвращает не None), очищаются поля ввода, отображается сообщение об успешной авторизации, и данные пользователя выводятся в консоль (в дальнейшем это будет заменено на переход в личный кабинет).
- Если пользователь не найден (fetchone() возвращает None), отображается всплывающее сообщение об ошибке с помощью page.snackbar.
Добавление навигации
Для добавления навигации перед функцией pageAdd добавим следующий код:
page.navigation_bar = NavigationBar(destinations=[
NavigationDestination(icon=..., title="Регистрация"),
NavigationDestination(icon=..., title="Авторизация"),
# ...будущая вкладка "Личный кабинет"
])
page.navigation_bar.on_change = navigate
Функция navigate обрабатывает событие изменения выбранного элемента навигации. Изначально она выводит в терминал индекс выбранного элемента. В дальнейшем, в зависимости от индекса, будет выполняться отображение соответствующей страницы (PanelRegister или PanelHouse). Функция navigate также выполняет очистку страницы с помощью page.clean() перед отображением новой страницы, чтобы избежать накопления элементов интерфейса.
В результате мы получили работающую систему регистрации и авторизации пользователей с использованием базы данных, а также добавили удобную навигацию между страницами регистрации, авторизации и (в будущем) личного кабинета. Теперь приложение позволяет регистрировать новых пользователей, авторизовываться и переключаться между страницами с помощью нижней навигационной панели.