Skip to content

Sofia-Rdv/flask_form_project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🦄 Funny Flask Form App

Веселое и интерактивное Fullstack-приложение на Python и Flask. Этот проект демонстрирует создание веб-интерфейса с ярким дизайном, анимациями на CSS, интерактивностью на JavaScript и надежным бэкендом.

🚀 Особенности

  • Интерактивная форма: Валидация данных прямо в браузере (HTML5).
  • Яркий дизайн: Кастомные стили, анимации, "покачивания" заголовка и "прыгающие" кнопки.
  • JavaScript Пасхалки: Убегающая кнопка-сюрприз и динамический предпросмотр цвета
  • Умный Бэкенд:
    • Генерация случайных шуток на основе данных пользователя.
    • Обработка ошибок (404, 500).
    • Система логирования событий и ошибок в файлы app.log и error.log.
    • Автоматические тесты для проверки работоспособности.

Структура проекта

flask_form_project/
└── logging_module/
    ├── my_logger_config.py         # Модуль с настройками логирования и инициализацией логгеров
    ├── my_logging_config.yaml      # YAML-файл конфигурации для логирования
    └── my_color_formatter.py       # Кастомный форматтер для цветного вывода логов в консоль
└── logs/                           # Директория для логов
    └── general                     # Директория с файлами для логов 
        ├── app.log                 # Информационные логи приложения
        └── error.log               # Логи ошибок и исключений              
└── app/                            # Директория с файлами программы
    └── static/                     # Директория со статическими файлами
        └── css/                    # Папка для CSS-файлов
            ├── styles.css          # Статический CSS-файл
    ├── templates/                  # Директория с HTML-шаблонами
        ├── base.html               # Базовый шаблон (используется во всех остальных)
        ├── error.html              # Шаблон ошибки
        ├── form.html               # Шаблон формы
        ├── result.html             # Шаблон с результатом
    ├── __init__.py                 # Инициализация приложения
    ├── routes.py                   # Файл с маршрутами
└── tests/                          # Директория с файлом для тестирования приложения
    ├── test_routes.py              # Автоматизированные тесты для проверки маршрутов
├── run.py                          # Запуск программы
└── requirements.txt                # Список библиотек необходимых для работы программы

🛠 Технологии

  • Backend: Python 3, Flask, Jinja2
  • Frontend: HTML5, CSS3, JavaScript
  • Тестирование: Pytest (Современный фреймворк для тестирования Python)
  • Логирование: Модульная система на базе Python logging, конфигурация через YAML, кастомный цветной форматтер для консоли.

Начало работы

Требования

  • Python 3.10+
  • Flask 3+
  • pytest (для тестирования)
  • PyYAML (для загрузки конфигурации логирования)
  • Colorama - (для цветного вывода логов в консоль)

📦 Установка и запуск

  1. Клонировать репозиторий:
git clone <URL_РЕПОЗИТОРИЯ>
cd <ИМЯ_ПАПКИ_ПРОЕКТА>
  1. Установить необходимые библиотеки (инструкцию см. ниже).
  2. Запустить приложение:
python run.py

Инструкция по установке библиотек

  1. В командной строке или окне терминала ввести команду
  2. Нажать кнопку Enter

Команды для установки

  • pip install -r requirements.txt - Для установки всех библиотек

Система логирования

Приложение реализует комплексную систему логирования, которая:

  • Записывает все события приложения и ошибки.
  • Использует различные уровни логирования (INFO, WARNING, ERROR, DEBUG, CRITICAL).
  • Обеспечивает цветной вывод в консоль для лучшей читаемости.
  • Хранит логи в отдельных файлах(app.log для общей информации, error.log для ошибок) в общей директории logs/.

Файлы логов

  • app.log: Содержит общую информацию о работе приложения, включая действия пользователя, успешное выполнение запросов к API и информационные сообщения.
  • error.log: Записывает все сообщения уровня ERROR и выше.

Компоненты логирования

Настройка системы логирования осуществляется через следующие файлы:

  • my_logger_config.py: Настраивает конфигурацию логирования
  • my_logging_config.yaml: Конфигурация для различных логгеров
  • my_color_formatter.py: Кастомный форматтер для цветного вывода в консоль

Тестирование

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

Запуск тестов

Тесты можно запустить из командной строки:

  • pytest - Краткий вариант результатов тестирования
  • pytest -v - Более детальный вывод результатов тестирования

Также файл с тестированием можно запустить как и обычный код, через кнопку run.

Примеры тестов

  1. Тест проверяет корректную обработку POST-запроса(отправку формы)
def test_submit_form_success(client):
    """
    Проверяет успешную обработку формы с валидными данными.

    Выполняет POST-запрос с корректным именем и email.
    Ожидает код 200 и наличие имени пользователя в ответе.

    :param client: Фикстура тестового клиента.
    """
    test_data = {'name': 'Ivan', 'email': 'ivan@example.com'}
    response = client.post('/submit', data=test_data, follow_redirects=True)

    assert response.status_code == 200
    # Проверяем, что на странице результата отобразилось имя с помощью декодировки
    assert "Ivan" in response.data.decode('utf-8')
  1. Тест проверяет обработку запроса к несуществующему маршруту
def test_page_not_found(client):
    """
    Проверяет обработку запроса к несуществующему маршруту.

    Выполняет запрос по случайному адресу и ожидает статус-код 404
    с соответствующим сообщением об ошибке на странице.

    :param client: Фикстура тестового клиента.
    """
    response = client.get('/some_non_existent_page')
    assert response.status_code == 404
    assert "Страница потерялась в космосе" in response.data.decode('utf-8')

About

Работа с API через Flask: модульная структура, профессиональное логирование и тестирование(Pytest)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors