- •Курсовая работа по дисциплине
- •Введение
- •Постановка задачи
- •Обоснование выбора технологий
- •Разработка структуры программы
- •4.1. Общая архитектура клиент-серверного взаимодействия
- •4.2. Структура серверного приложения (Flask)
- •4.3. Система хранения данных
- •4.4. Схема базы данных
- •Разработка ключевых модулей серверной части
- •5.1. Модуль инициализации и конфигурации
- •5.2. Модуль работы с данными клиник и записей (json-слой)
- •5.3. Модуль взаимодействия с базой данных (MySql-слой)
- •5.4. Модуль маршрутизации и обработки запросов (Flask-пути)
- •5.5. Модуль управления сессиями и аутентификацией
- •Сценарии пользователя
- •Заключение
- •Приложение
Обоснование выбора технологий
Выбор Flask в качестве веб-фреймворка:
Flask был выбран как фреймворк, предоставляющий необходимый минимум для создания веб-приложения без навязывания излишней структуры. Его преимущества для данного проекта:
· Минимализм и гибкость: позволяет быстро создавать маршруты (routes) и обработчики запросов, что идеально для учебного проекта и REST API.
· Простота интеграции: легко подключаются необходимые расширения (CORS для обработки запросов с фронтенда, работа с сессиями «из коробки»).
· Низкий порог входа: позволяет сосредоточиться на изучении принципов HTTP-взаимодействия и проектирования API, не отвлекаясь на сложности полноценных фреймворков.
· Альтернативы (Django, FastAPI) были отклонены: Django избыточен для небольшого API, FastAPI, хотя и быстр, требует большего погружения в асинхронность на начальном этапе.
Выбор MySQL в качестве системы управления базами данных:
MySQL 8.0 применяется для хранения операционных данных проекта.
· Надёжность и распространённость: Проверенная временем реляционная СУБД, обеспечивающая целостность данных и поддержку транзакций, что критично для учёта записей и заказов.
· Структурированность данных: Информация о пользователях, их записях и заказах идеально ложится на реляционную модель с внешними ключами и связями.
· Интеграция с Python: Библиотека pymysql предоставляет стабильный и понятный интерфейс для выполнения SQL-запросов, поддерживает параметризованные запросы для безопасности.
Выбор гибридной модели хранения (JSON + MySQL):
Архитектурное решение использовать JSON-файлы для части данных продиктовано спецификой задачи:
· JSON для «конфигурационных» данных: Информация о клиниках (название, адрес, список услуг) и предварительно сгенерированное расписание (слоты) изменяются относительно редко. Хранение их в файлах clinics.json и appointments.json упрощает процесс разработки, отладки и первоначального заполнения системы, избавляя от необходимости сложных миграций БД на раннем этапе.
· MySQL для «транзакционных» данных: Данные, связанные с действиями пользователей (учётные записи, факты записи, заказы), требуют гарантий целостности, безопасности и возможности сложных выборок (например, получение истории записей конкретного пользователя). Реляционная база данных — оптимальный выбор для этих задач.
· Такой подход демонстрирует понимание принципа разделения данных по частоте и характеру их использования.
Выбор pymysql для работы с MySQL:
Библиотека pymysql является Python реализацией клиента MySQL, что обеспечивает простоту установки и кроссплатформенность. Она предоставляет менеджер контекста для автоматического закрытия соединений, что соответствует практике Python и предотвращает утечки ресурсов.
Разработка структуры программы
Разработанное веб-приложение "Медицинский портал" представляет собой сложную распределённую систему, построенную по принципу трёхзвенной архитектуры с чётким разделением ответственности между компонентами. Серверная часть, реализованная на Python с использованием фреймворка Flask, выступает центральным узлом системы, обеспечивая взаимодействие между клиентской частью (браузером пользователя) и различными источниками данных. Архитектура системы сознательно спроектирована как гибридная, сочетающая простоту файлового хранения для статических справочных данных и мощь реляционной базы данных для операционных записей, что отражает современные подходы к проектированию веб-приложений.
