Содержание
Django Film Manager - это простое веб-приложение на Django для управления списком фильмов. Проект демонстрирует базовую функциональность CRUD операций с использованием Django framework.
Цели и задачи проекта
Цели:
- Создать простое и функциональное веб-приложение для управления списком фильмов
- Продемонстрировать базовые возможности Django framework
- Реализовать систему аутентификации и авторизации пользователей
- Обеспечить безопасность приложения на всех уровнях
Ключевые задачи:
- Разработать модель данных для хранения информации о фильмах
- Создать пользовательский интерфейс для просмотра и добавления фильмов
- Реализовать систему входа и выхода пользователей
- Настроить админ-панель для управления данными
- Внедрить валидацию данных на уровне модели и формы
- Обеспечить защиту от XSS атак и других уязвимостей
- Реализовать rate limiting для защиты от злоупотреблений
- Настроить логирование событий безопасности
- Создать кастомную команду для быстрого создания тестового пользователя
Результаты
Реализованная функциональность:
- Просмотр списка фильмов (доступно всем пользователям)
- Добавление новых фильмов (требуется авторизация)
- Система аутентификации пользователей
- Админ-панель для управления данными
- Валидация данных на уровне модели и формы
- Защита от XSS атак и других уязвимостей
- Rate limiting для защиты от злоупотреблений
- Логирование безопасности
Созданные компоненты:
- Django приложение
filmsдля работы с фильмами - Модель
Filmс полями: название, описание и отзыв - HTML страницы: список фильмов и форма добавления
- Базовый шаблон с навигацией и улучшенным дизайном
- Кастомная команда для создания тестового суперпользователя
(В начало)
Основные технологии и библиотеки, используемые в проекте:
Дополнительные зависимости:
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
Ниже приведены инструкции по установке и настройке приложения.
-
Клонируйте репозиторий
git clone https://github.com/your_username/repo_name.git cd Simpliest-Django-item-list -
Создайте виртуальное окружение (рекомендуется)
python -m venv venv # Windows venv\Scripts\activate # Linux/Mac source venv/bin/activate
-
Установите зависимости
pip install -r requirements.txt
-
Примените миграции
python manage.py migrate
-
Создайте тестового суперпользователя
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
- Имя:
-
Запустите сервер разработки
python manage.py runserver
-
Откройте в браузере:
- Главная страница: http://127.0.0.1:8000/films/list/
- Админ-панель: http://127.0.0.1:8000/admin-panel-secure/
(В начало)
Использование
Приложение предоставляет следующие страницы и функциональность:
-
Список фильмов (
/films/list/)- Отображает все фильмы из базы данных
- Доступна всем пользователям без авторизации
- Показывает название, описание и отзыв для каждого фильма
-
Добавление фильма (
/films/add/)- Форма для добавления нового фильма
- Требуется авторизация
- Включает валидацию данных
- Защищена от злоупотреблений (rate limiting: 10 запросов в час)
-
Вход в систему (
/films/login/)- Страница авторизации пользователей
- Защищена от брутфорс атак (rate limiting: 5 попыток в минуту)
- Логирование всех попыток входа
-
Админ-панель (
/admin-panel-secure/)- Стандартная Django админ-панель
- URL изменен для повышения безопасности
- Полный доступ к управлению данными
- Валидация данных на уровне модели и формы
- Защита от XSS атак через санитизацию HTML
- Rate limiting для критических операций
- Логирование событий безопасности
- Настроенные заголовки безопасности
(В начало)
Показать пройденные этапы разработки
-
Этап 1: Базовая структура проекта
- Создание Django проекта
movie_project - Создание приложения
films - Настройка базовой структуры URL и маршрутизации
- Создание Django проекта
-
Этап 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». Не забудьте поставить проекту звездочку! Еще раз спасибо!
- Создать fork проекта
- Создайте ветку для вашей функции (
git checkout -b feature/AmazingFeature) - Зафиксируйте изменения (
git commit -m 'Add some AmazingFeature') - Отправьте изменения в ветку (
git push origin feature/AmazingFeature) - Создайте Pull Request
(В начало)
Распространяется по лицензии MIT. Дополнительную информацию см. в файле LICENSE.
(В начало)
(В начало)
Выражаю искреннюю благодарность университету Zerocoder и всей его команде за создание вдохновляющей и профессиональной образовательной среды. За подготовку "IT-астронавтов" на "космодроме" Зерокодер.
Особая благодарность:
Кириллу Пшиннику, директору университета, за вдохновение на подвиг;
Преподавателям Нине Стефанцовой, Максиму Вершинину и Дарье Бобровской — за глубокие знания, терпение и готовность всегда помочь;
Никите Муркину, куратору курса, за чёткую организацию и наставничество;
Елизавете, менеджеру, за заботу, оперативность и неизменную доброжелательность.
Благодаря вам этот проект стал возможен!
(В начало)
