Skip to content

Z01coder/Simpliest-Django-item-list

Repository files navigation

Язык: English | Русский

Django Film Manager

Простое Django приложение для управления списком фильмов

Содержание
  1. О проекте
  2. Начало работы
  3. Использование
  4. План развития
  5. Вклад в проект
  6. Лицензия
  7. Контакты
  8. Благодарности

О проекте

Превью

Django Film Manager - это простое веб-приложение на Django для управления списком фильмов. Проект демонстрирует базовую функциональность CRUD операций с использованием Django framework.

Цели и задачи проекта

Цели:

  • Создать простое и функциональное веб-приложение для управления списком фильмов
  • Продемонстрировать базовые возможности Django framework
  • Реализовать систему аутентификации и авторизации пользователей
  • Обеспечить безопасность приложения на всех уровнях

Ключевые задачи:

  • Разработать модель данных для хранения информации о фильмах
  • Создать пользовательский интерфейс для просмотра и добавления фильмов
  • Реализовать систему входа и выхода пользователей
  • Настроить админ-панель для управления данными
  • Внедрить валидацию данных на уровне модели и формы
  • Обеспечить защиту от XSS атак и других уязвимостей
  • Реализовать rate limiting для защиты от злоупотреблений
  • Настроить логирование событий безопасности
  • Создать кастомную команду для быстрого создания тестового пользователя
Результаты

Реализованная функциональность:

  • Просмотр списка фильмов (доступно всем пользователям)
  • Добавление новых фильмов (требуется авторизация)
  • Система аутентификации пользователей
  • Админ-панель для управления данными
  • Валидация данных на уровне модели и формы
  • Защита от XSS атак и других уязвимостей
  • Rate limiting для защиты от злоупотреблений
  • Логирование безопасности

Созданные компоненты:

  • Django приложение films для работы с фильмами
  • Модель Film с полями: название, описание и отзыв
  • HTML страницы: список фильмов и форма добавления
  • Базовый шаблон с навигацией и улучшенным дизайном
  • Кастомная команда для создания тестового суперпользователя

(В начало)

Используемые технологии

Основные технологии и библиотеки, используемые в проекте:

  • Django
  • Python

Дополнительные зависимости:

  • python-decouple==3.8 - для управления настройками через переменные окружения
  • django-ratelimit==4.1.0 - для ограничения частоты запросов
  • django-bleach==3.1.0 и bleach>=5.0.0,<6.0.0 - для санитизации HTML контента

(В начало)

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

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

Требования

Для работы с проектом необходимо установить:

  • Python 3.x
    # Проверьте версию Python
    python --version

Установка

Ниже приведены инструкции по установке и настройке приложения.

  1. Клонируйте репозиторий

    git clone https://github.com/your_username/repo_name.git
    cd Simpliest-Django-item-list
  2. Создайте виртуальное окружение (рекомендуется)

    python -m venv venv
    # Windows
    venv\Scripts\activate
    # Linux/Mac
    source venv/bin/activate
  3. Установите зависимости

    pip install -r requirements.txt
  4. Примените миграции

    python manage.py migrate
  5. Создайте тестового суперпользователя

    python manage.py create_test_superuser

    По умолчанию создается пользователь:

    • Имя: admin
    • Пароль: admin123
    • Email: admin@example.com

    Для создания пользователя с другими данными:

    python manage.py create_test_superuser --username testuser --password testpass123 --email test@example.com
  6. Запустите сервер разработки

    python manage.py runserver
  7. Откройте в браузере:

(В начало)

Использование

Приложение предоставляет следующие страницы и функциональность:

Основные страницы:

  1. Список фильмов (/films/list/)

    • Отображает все фильмы из базы данных
    • Доступна всем пользователям без авторизации
    • Показывает название, описание и отзыв для каждого фильма
  2. Добавление фильма (/films/add/)

    • Форма для добавления нового фильма
    • Требуется авторизация
    • Включает валидацию данных
    • Защищена от злоупотреблений (rate limiting: 10 запросов в час)
  3. Вход в систему (/films/login/)

    • Страница авторизации пользователей
    • Защищена от брутфорс атак (rate limiting: 5 попыток в минуту)
    • Логирование всех попыток входа
  4. Админ-панель (/admin-panel-secure/)

    • Стандартная Django админ-панель
    • URL изменен для повышения безопасности
    • Полный доступ к управлению данными

Безопасность:

  • Валидация данных на уровне модели и формы
  • Защита от XSS атак через санитизацию HTML
  • Rate limiting для критических операций
  • Логирование событий безопасности
  • Настроенные заголовки безопасности

(В начало)

План развития

Показать пройденные этапы разработки

Выполненные этапы:

  • Этап 1: Базовая структура проекта

    • Создание Django проекта movie_project
    • Создание приложения films
    • Настройка базовой структуры URL и маршрутизации
  • Этап 2: Модель данных

    • Разработка модели Film с полями: название, описание, отзыв
    • Создание и применение миграций базы данных
    • Добавление полей created_at и updated_at для отслеживания времени
  • Этап 3: Базовые представления и шаблоны

    • Реализация представления для отображения списка фильмов
    • Создание HTML шаблонов для списка фильмов
    • Настройка базового шаблона с навигацией
  • Этап 4: Система аутентификации

    • Реализация страницы входа пользователей
    • Реализация функционала выхода из системы
    • Настройка декораторов для защиты страниц, требующих авторизации
    • Настройка редиректов после входа/выхода
  • Этап 5: Функционал добавления фильмов

    • Создание формы FilmForm для добавления фильмов
    • Реализация представления для обработки формы
    • Создание HTML шаблона формы добавления
  • Этап 6: Валидация данных

    • Реализация валидации на уровне модели (метод clean())
    • Реализация валидации на уровне формы (методы clean_*())
    • Проверка минимальной и максимальной длины полей
    • Базовая защита от опасных символов
  • Этап 7: Защита от XSS атак

    • Интеграция библиотек django-bleach и bleach
    • Санитизация HTML контента в формах
    • Удаление HTML тегов через strip_tags()
    • Проверка на опасные паттерны (script, javascript:, onerror, onload)
  • Этап 8: Rate Limiting (ограничение частоты запросов)

    • Интеграция библиотеки django-ratelimit
    • Ограничение попыток входа (5 попыток в минуту)
    • Ограничение добавления фильмов (10 запросов в час)
    • Обработка превышения лимитов с информативными сообщениями
  • Этап 9: Логирование безопасности

    • Настройка системы логирования в settings.py
    • Создание отдельного логгера для событий безопасности
    • Логирование успешных и неудачных попыток входа
    • Логирование превышения лимитов и ошибок валидации
    • Настройка файлов логов (django.log, security.log)
  • Этап 10: Настройки безопасности

    • Настройка заголовков безопасности (XSS Protection, Content Type Nosniff, Frame Options)
    • Настройка безопасности сессий (HttpOnly, Secure, SameSite)
    • Настройка CSRF защиты
    • Настройка HSTS для продакшена
    • Базовая настройка Content Security Policy
  • Этап 11: Управление настройками через переменные окружения

    • Интеграция библиотеки python-decouple
    • Вынос секретных ключей в переменные окружения
    • Настройка SECRET_KEY, DEBUG, ALLOWED_HOSTS через .env
  • Этап 12: Улучшение пользовательского интерфейса

    • Интеграция Bootstrap 5.3 для современного дизайна
    • Создание адаптивной навигационной панели
    • Улучшение форм с CSS-классами Bootstrap
    • Отображение статуса пользователя в навигации
  • Этап 13: Админ-панель

    • Настройка Django админ-панели для модели Film
    • Добавление фильтров и поиска в админ-панели
    • Изменение стандартного URL админ-панели на /admin-panel-secure/
    • Настройка заголовков админ-панели
  • Этап 14: Кастомные команды управления

    • Создание команды create_test_superuser для быстрого создания тестового пользователя
    • Реализация поддержки аргументов командной строки
    • Добавление проверки существования пользователя
  • Этап 15: Локализация

    • Настройка русского языка интерфейса
    • Перевод названий полей моделей на русский
    • Русские сообщения об ошибках валидации
  • Этап 16: Документация

    • Создание подробного README.md с описанием проекта
    • Добавление инструкций по установке и настройке
    • Описание функциональности и страниц приложения
    • Документирование настроек безопасности
    • Описание используемых технологий и зависимостей

Планируемые улучшения:

  • Добавление функционала редактирования фильмов
  • Добавление функционала удаления фильмов
  • Реализация системы категорий фильмов
  • Добавление возможности загрузки изображений для фильмов
  • Реализация системы рейтингов фильмов
  • Добавление пагинации для списка фильмов
  • Реализация полнотекстового поиска
  • Добавление API endpoints (REST API)
  • Написание unit-тестов
  • Настройка CI/CD pipeline

(В начало)

Вклад в проект

Вклады делают сообщество открытого исходного кода таким удивительным местом для обучения, вдохновения и творчества. Любые ваши вклады будут высоко оценены.

Если у вас есть предложения по улучшению, пожалуйста, создайте fork репозитория и отправьте pull request. Вы также можете просто открыть задачу с тегом «enhancement». Не забудьте поставить проекту звездочку! Еще раз спасибо!

  1. Создать fork проекта
  2. Создайте ветку для вашей функции (git checkout -b feature/AmazingFeature)
  3. Зафиксируйте изменения (git commit -m 'Add some AmazingFeature')
  4. Отправьте изменения в ветку (git push origin feature/AmazingFeature)
  5. Создайте Pull Request

(В начало)

Лицензия

Распространяется по лицензии MIT. Дополнительную информацию см. в файле LICENSE.

(В начало)

Контакты

  • GitHub
  • Gmail
  • Telegram

(В начало)

Благодарности

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

Особая благодарность:

Кириллу Пшиннику, директору университета, за вдохновение на подвиг;

Преподавателям Нине Стефанцовой, Максиму Вершинину и Дарье Бобровской — за глубокие знания, терпение и готовность всегда помочь;

Никите Муркину, куратору курса, за чёткую организацию и наставничество;

Елизавете, менеджеру, за заботу, оперативность и неизменную доброжелательность.

Благодаря вам этот проект стал возможен!

(В начало)

About

An application, a model, a template, and two html pages on Django. Case for developing a movie list.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published