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

4.1. Общая архитектура клиент-серверного взаимодействия

В основе системы лежит классическая архитектура "клиент-сервер", где клиентская часть, исполняемая в браузере пользователя, и серверная часть, развёрнутая на веб-сервере, взаимодействуют через протокол HTTP. Это взаимодействие организовано по принципу RESTful API, где каждая операция представлена в виде отдельного HTTP-запроса с чётко определённой семантикой. Клиентская часть, реализованная на JavaScript, выступает в роли интеллектуального клиента, который не просто отображает статические страницы, а динамически взаимодействует с сервером, отправляя запросы и обрабатывая ответы в формате JSON. Такая архитектура обеспечивает высокую отзывчивость интерфейса, так как браузеру не требуется полная перезагрузка страницы для каждого действия пользователя.

Серверная часть построена на основе фреймворка Flask, который был выбран за его минимализм, гибкость и соответствие философии Python "явное лучше неявного". Flask обрабатывает входящие HTTP-запросы через механизм маршрутизации (routing), где каждый URL-адрес сопоставляется с определённой функцией-обработчиком. Эти обработчики выполняют необходимую бизнес-логику: обращаются к данным, выполняют проверки, преобразуют информацию и формируют ответы. Ключевым аспектом архитектуры является разделение между обработкой запросов (контроллеры), бизнес-логикой (сервисы) и доступом к данным (репозитории), хотя в данном учебном проекте это разделение реализовано в упрощённой форме.

Слой данных системы реализован как гибридная модель, что является осознанным архитектурным решением. Для хранения информации о клиниках и расписании используются структурированные JSON-файлы, которые загружаются в память при запуске сервера. Этот подход оправдан для данных, которые изменяются относительно редко и не требуют сложных запросов или транзакционных гарантий. Для операционных данных — информации о пользователях, истории записей и заказах — используется реляционная система управления базами данных MySQL, которая обеспечивает целостность данных, поддержку транзакций и возможность выполнения сложных запросов. Такое разделение позволяет оптимизировать производительность системы: часто запрашиваемые данные о клиниках и расписании доступны мгновенно из памяти, в то время как критически важные операционные данные надёжно защищены механизмами СУБД.

4.2. Структура серверного приложения (Flask)

Центральным компонентом серверной части является файл server.py, который выполняет роль точки входа в приложение и объединяет все его компоненты в единое целое. Структура этого файла отражает лучшие практики организации Flask-приложений, начиная с импорта необходимых модулей и заканчивая точкой запуска приложения. Инициализация Flask-приложения начинается с создания экземпляра класса Flask, которому передаются параметры, определяющие структуру проекта: пути к папкам со статическими файлами и HTML-шаблонами. Важным элементом конфигурации является установка секретного ключа (secret_key), который используется для криптографической подписи сессионных данных, обеспечивая защиту от подделки.

Одной из ключевых особенностей архитектуры является использование механизма CORS (Cross-Origin Resource Sharing), который разрешает взаимодействие между клиентской частью, загруженной из одного домена, и серверной частью, расположенной на другом. Это особенно важно в современных веб-приложениях, где фронтенд и бэкенд часто развёртываются независимо. Механизм сессий Flask, основанный на подписанных cookies, обеспечивает состояние между запросами, позволяя идентифицировать пользователя и хранить информацию о его авторизации на протяжении всей сессии работы с приложением.

Серверное приложение чётко разделяет обработку двух типов запросов: запросов на получение HTML-страниц и запросов к API, возвращающих данные в формате JSON. Для HTML-страниц используются шаблоны Jinja2, которые позволяют динамически генерировать контент на основе данных, переданных из Python-кода. Например, главная страница получает имя пользователя из сессии и отображает персонализированное приветствие. API-эндпоинты, начинающиеся с префикса /api/, возвращают структурированные данные в формате JSON, что позволяет клиентской части гибко обновлять интерфейс без полной перезагрузки страницы.