Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программная инженерия. Курсовые / Вебтехнологии_Курсовая_Яковлев.docx
Скачиваний:
0
Добавлен:
04.01.2026
Размер:
800.32 Кб
Скачать

Разработка ключевых модулей серверной части

5.1. Модуль инициализации и конфигурации

Модуль инициализации выполняет роль фундамента, на котором строится всё приложение. Его первая задача — подготовка среды выполнения: импорт необходимых библиотек, определение путей к критически важным ресурсам, создание структур каталогов при их отсутствии.

  1. Инициализация объекта Flask-приложения — здесь определяются основные параметры работы приложения: расположение статических файлов и шаблонов, настройки безопасности, подключение необходимых расширений

  2. Процесс загрузки начальных данных реализован по принципу "ленивой инициализации": при запуске сервера система проверяет наличие необходимых JSON-файлов и либо загружает существующие данные, либо создаёт демонстрационный набор. Функции load_clinics() и load_appointments() загружают данные, абстрагируя клиентский код от деталей хранения.

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

5.2. Модуль работы с данными клиник и записей (json-слой)

Модуль работы с JSON-данными реализует абстракцию над файловым хранением. Функции load_clinics() и save_clinics() инкапсулируют логику чтения и записи данных о клиниках, обрабатывая кодировку (UTF-8 для корректной работы с русским языком) и форматирование.

  1. Особенностью реализации является использование контекстных менеджеров (with open() as f:), которые гарантируют корректное закрытие файлов даже при возникновении исключений.

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

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

  4. Состояние каждого временного слота (свободен/занят) хранится исключительно в JSON-файле. При бронировании слота выполняется атомарная операция обновления — изменение статуса и сохранение всего файла.

5.3. Модуль взаимодействия с базой данных (MySql-слой)

Модуль взаимодействия с MySQL построен вокруг подключений get_db_connection().

  1. get_db_connection() — инкапсулирует детали установки соединения с базой данных. Функция возвращает готовое подключение с предварительно настроенными параметрами: кодировкой UTF-8 для корректной работы с Unicode-символами и классом курсора, возвращающего результаты запросов в виде словарей для удобства работы.

  2. Функция log_appointment_to_db() реализует запись в базу данных неизменяемую запись о каждом факте бронирования. Эта функция демонстрирует использование параметризованных SQL-запросов, где все переменные значения передаются через механизм параметров (%s), а не конкатенацией строк. Такой подход обеспечивает защиту от SQL-инъекций — одной из наиболее опасных уязвимостей веб-приложений.

  3. Использование контекстных менеджеров (with conn.cursor() as cursor:) гарантирует своевременное освобождение ресурсов — курсоры и соединения автоматически закрываются при выходе из контекста, даже в случае исключений. Это предотвращает утечки соединений, которые могут привести к исчерпанию ресурсов сервера.