Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 семестр / Лабораторные работы / Задание_2 лаб раб (Flask)

.docx
Скачиваний:
0
Добавлен:
26.09.2026
Размер:
27 Кб
Скачать
☆

Практическое задание по Flask

Разработка веб-приложения "Блог"

Задание

На основе кода, разработанного на лекции, необходимо создать собственное веб-приложение "Блог" с расширенным функционалом. Запрещено сдавать приложение, полностью идентичное лекционному примеру. Вы должны выбрать одно из пяти направлений развития и реализовать его, а также добавить индивидуальные особенности.

Вариант 1. Категории и теги

Добавить систему категорий и тегов для постов.

Обязательный минимум:

  • Таблица categories (id, name, description, created_at)

  • Таблица tags (id, name)

  • Связь многие-ко-многим между постами и тегами

  • Возможность выбирать категорию и добавлять теги при создании/редактировании поста

  • Фильтрация постов по категории на главной странице

  • Облако тегов (список всех тегов с количеством постов)

Дополнительные баллы:

  • Поиск по тегам (вывод всех постов с выбранным тегом)

  • Иерархические категории (родитель-потомок)

  • Хлебные крошки (breadcrumbs) для навигации по категориям

Вариант 2. Комментарии и лайки

Добавить систему комментариев и реакций на посты.

Обязательный минимум:

  • Таблица comments (id, post_id, author_name, author_email, content, created_at, is_approved)

  • Форма добавления комментария под постом (имя, email, текст)

  • Капча или простейшая защита от спама (например, вопрос "Сколько будет 2+2?")

  • Модерация комментариев (поле is_approved, показывать только одобренные)

  • Счетчик комментариев на главной странице

Дополнительные баллы:

  • Система лайков/дизлайков для постов

  • Ответы на комментарии (вложенные комментарии)

  • Gravatar (аватарки по email)

  • Уведомление автора поста о новом комментарии по email

Вариант 3. Авторизация и пользователи

Добавить систему регистрации и авторизации с разграничением прав.

Обязательный минимум:

  • Таблица users (id, username, email, password_hash, created_at, is_admin)

  • Регистрация с хешированием пароля (использовать werkzeug.security)

  • Вход и выход (логин/логаут)

  • Сессии пользователей

  • Привязка постов к пользователю (поле author_id)

  • Только автор может редактировать/удалять свой пост

Дополнительные баллы:

  • Восстановление пароля через email

  • Профиль пользователя со списком его постов

  • Администратор (может редактировать/удалять любые посты)

  • Роли пользователей (админ, модератор, автор, читатель)

Вариант 4. Загрузка изображений

Добавить возможность прикреплять изображения к постам.

Обязательный минимум:

  • Поле image в таблице posts (путь к файлу)

  • Загрузка изображения через форму создания/редактирования поста

  • Валидация типа и размера файла (только jpg, png, gif; не более 5MB)

  • Безопасное сохранение файлов (уникальное имя, проверка расширения)

  • Отображение изображения на странице поста

  • Миниатюры (thumbnails) на главной странице

Дополнительные баллы:

  • Галерея изображений (несколько картинок на пост)

  • Автоматическое изменение размера (resize) для миниатюр

  • Водяные знаки на изображениях

  • Drag-and-drop загрузка файлов

Вариант 5. REST API

Добавить программный интерфейс для доступа к блогу.

Обязательный минимум:

  • Эндпоинты API (использовать jsonify):

    • GET /api/posts — список всех постов (в формате JSON)

    • GET /api/posts/<id> — конкретный пост

    • POST /api/posts — создание нового поста (принимает JSON)

    • PUT /api/posts/<id> — обновление поста

    • DELETE /api/posts/<id> — удаление поста

  • Аутентификация через API-ключ или токен

  • Документация API (в README или отдельной странице /api/docs)

  • Обработка ошибок с правильными HTTP-кодами

Дополнительные баллы:

  • Пагинация для GET /api/posts

  • Фильтрация и сортировка

  • Rate limiting (ограничение количества запросов)

  • Swagger-документация

Индивидуальные особенности (обязательно для всех вариантов)

Вне зависимости от выбранного варианта, вы должны добавить минимум два из следующих улучшений:

  1. Поиск — строка поиска на главной странице, ищущая по заголовку и содержанию

  2. Пагинация — разбиение списка постов на страницы (например, по 5 постов на страницу)

  3. RSS-лента — /rss с последними 10 постами в формате RSS

  4. Sitemap.xml — /sitemap.xml для поисковых систем

  5. Статистика — отдельная страница со статистикой (количество постов, комментариев, пользователей)

  6. Экспорт — кнопка "Экспорт в CSV" для выгрузки постов

  7. Черновики — возможность сохранить пост как черновик (поле published), не показывать на главной

  8. Плагин для синтаксиса кода — подсветка кода в постах (например, с помощью highlight.js)

Требования к реализации

Технические требования

  1. Python 3.9+ и Flask 2.x

  2. SQLite для хранения данных

  3. Bootstrap 5 для интерфейса (можно использовать другую тему)

  4. Jinja2 для шаблонов

  5. Git для контроля версий

Архитектурные требования

  1. Чистый код — соблюдение PEP 8, осмысленные имена переменных

  2. Комментарии — docstring для всех функций и сложных мест

  3. Модульность — разделение на отдельные файлы (если код большой)

  4. Обработка ошибок — try-except где необходимо, 404 для несуществующих постов

  5. Валидация — проверка всех пользовательских данных

Требования к интерфейсу

  1. Адаптивный дизайн (должен хорошо выглядеть на мобильных)

  2. Навигационная панель с ссылками на все разделы

  3. Flash-сообщения об успехе/ошибке

  4. Подтверждение перед удалением

  5. Интуитивно понятные формы

Shape1

Структура отчёта

Отчёт оформляется в виде Jupyter Notebook с расширением .ipynb и должен содержать:

1. Титульный лист

  • Название работы

  • ФИО студента

  • Группа

  • Вариант задания

  • Дата

2. Описание проекта

  • Какой вариант выбран и почему

  • Какие индивидуальные особенности добавлены

  • Скриншоты готового приложения (главная, страница поста, форма создания)

3. Структура базы данных

  • Схема таблиц (можно в виде SQL-кода или диаграммы)

  • Описание полей и связей

4. Ключевые фрагменты кода

  • Не нужно вставлять весь код, только самое интересное:

    • Новые маршруты

    • Сложные SQL-запросы

    • Валидация форм

    • Работа с файлами (если есть)

5. Инструкция по установке и запуску

git clone <ваш-репозиторий>

cd <папка-проекта>

python -m venv venv

source venv/bin/activate # для Linux/Mac

# venv\Scripts\activate # для Windows

pip install -r requirements.txt

python init_db.py

flask run

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

  • Какие тесты проводились

  • Скриншоты работы всех функций

7. Проблемы и их решение

  • С какими трудностями столкнулись

  • Как их преодолели

8. Выводы

  • Чему научились

  • Что можно улучшить

  • Оценка сложности

Формат сдачи

  1. GitHub-репозиторий (обязательно):

    • Все файлы проекта

    • Файл requirements.txt со всеми зависимостями

    • README.md с описанием проекта и инструкцией по запуску

    • .gitignore (исключить venv/, __pycache__/, *.pyc, database.db)

  2. Jupyter Notebook с отчётом

  3. Ссылка на рабочее приложение (если разместили на хостинге)

Полезные ресурсы

  • Документация Flask

  • Документация Jinja2

  • Документация Bootstrap 5

  • Flask-WTF

  • Flask-Login

  • Flask-Uploads

  • SQLite документация

Соседние файлы в папке Лабораторные работы
  • #
  • #
  • #
    26.09.202636 Кб0Задание_3 лаб раб + лекция.ipynb
  • #
    26.09.2026510 Кб0Лабораторная работа №1_Ягудин Р_М092501(70).ipynb
  • #
    26.09.2026777 Кб0Лабораторная работа №2_Ягудин Р_М092501(70).ipynb
  • #
    26.09.202635 Кб0Лабораторная работа №3_Ягудин Р_М092501(70).ipynb