Skip to content

Итоговый проект по курсам "Основы Django Framework" и "Django Framework. Инструменты оптимизации"

Notifications You must be signed in to change notification settings

LubovSkutina/django_course

 
 

Repository files navigation

Итоговый проект по курсам "Основы Django Framework" и "Django Framework. Инструменты оптимизации"

В части курса "Основы Django Framework" разработана серверная часть для интернет-магазина. Реализованы собственная админка, пользователи, страницы товаров и корзина.

Подробный перечень решенных задач:

Задание 1. Знакомство с фреймворком

  1. Подготовить исходники для проекта – 3 страницы из верстки магазина, и разместить их в одной папке.
  2. Установить Django и PyCharm. Создать проект и в нем приложение «mainapp». Проверить, что все работает.
  3. Разместить шаблоны и статические файлы в соответствующих папках. Настроить проект – файл settings.py. Отредактировать файл диспетчера URL-адресов urls.py.
  4. Написать функции-обработчики для всех страниц – файл views.py в приложении «mainapp». Проверить работу всех страниц проекта в черновом режиме (без стилей и изображений).
  5. Откорректировать пути к статическим файлам и адреса гиперссылок в меню. Проверить, что все работает как положено (стили и изображения грузятся, гиперссылки работают).
  6. Сделать файл run.bat для быстрого запуска Django-сервера.

Задание 2. Шаблон + Контекст = html

  1. Реализовать наследование шаблонов в проекте. Меню подключить как подшаблон.
  2. Реализовать в проекте механизмы работы со статическими файлами и URL-адресами, которые прошли на уроке.
  3. Поработать с шаблонными тегами и фильтрами (заглавные буквы, вывод текущей даты в шаблоне).
  4. Организовать вывод динамического контента на страницах (элементы меню, список товара, заголовок страницы).

Задание 3. Модели + ORM = данные

  1. Настроить проект для работы с медиафайлами.
  2. Создать модели в проекте (обязательно должно быть поле с изображениями) и выполнить миграции.
  3. Поработать с моделями в консоли.
  4. Создать суперпользователя. Настроить админку и поработать в ней.
  5. Организовать работу с моделями в контроллерах и шаблонах.
  6. Реализовать автоматическое формирование меню категорий по данным из модели.

Задание 4. Аутентификация и регистрация пользователя

  1. Создать модель пользователя в проекте. Обязательно добавить поле с изображением и возрастом. Выполнить настройки в файле конфигурации.
  2. Организовать загрузку данных в БД из файла.
  3. Реализовать механизм аутентификации в проекте.
  4. Реализовать механизм регистрации пользователя.
  5. Организовать просмотр и редактирование данных пользователем.
  6. Разобраться с механизмом валидации данных формы. Создать свои валидаторы.

Задание 5. Пользователь + товар = корзина

  1. Поработать с запросами в консоли через механизм Django ORM.
  2. Реализовать механизм вывода товаров по категориям.
  3. Организовать динамическую генерацию меню категорий и подсветку выбранной категории.
  4. Создать приложение корзины.
  5. Реализовать механизм добавления товара в корзину.
  6. Вывести в меню счетчик купленных товаров.
  7. Написать в модели корзины методы для определения общего количества и стоимости добавленных товаров. Вывести эти величины в меню вместо счетчика, сделанного на уроке.

Задание 6. Корзина + AJAX + декораторы

  1. Добавить к модели корзины методы и вывести в меню количество товара и их полную стоимость.
  2. Реализовать механизм просмотра содержимого корзины и удаления товаров из нее.
  3. Реализовать просмотр товара, скорректировать адреса в каталоге и на главной странице так, чтобы при нажатии на товар появлялась страница просмотра. Добавление товара в корзину теперь должно быть только с этой страницы.
  4. Защитить доступ к корзине декоратором @login_required.
  5. Реализовать асинхронное редактирование количества товаров в корзине при помощи AJAX.
  6. Реализовать механизм вывода случайного товара на странице «горячее предложение», которая появляется при входе в каталог.

Задание 7. Собственная админка

  1. Создать приложение админки и интегрировать его в проект.
  2. Реализовать механизм CRUD для объектов пользователей магазина. Можно полностью удалять объекты (не использовать свойство is_active).
  3. Реализовать механизм CRUD для объектов категорий товара. Можно полностью удалять объекты (не использовать свойство is_active).
  4. Защитить доступ к админке декоратором @user_passes_test.
  5. Реализовать удаление через свойство is_active.
  6. Реализовать «подсветку» в админке неактивных объектов пользователей и категорий.

Задание 8. Полезное: страничный вывод, шаблонные фильтры, CBV

  1. Реализовать работу с товарами в админке.
  2. Организовать постраничный вывод в каталоге и админке.
  3. Перевести как можно больше контроллеров в проекте на CBV (минимум по одному для каждого из рассмотренных классов).
  4. Написать свои шаблонные фильтры и применить их.

Далее в курсе «Django Framework. Инструменты оптимизации», продолжена работа над интернет-магазином. Реализовано взаимодействовие сайта с пользователем (отправка email, принятие регистрации через социальные сети, обработка заказов), проведено тестирование проекта и временное развертывание его на VPS.

Подробный перечень решенных задач:

Задание 1. Отправка электронной почты. Контекстные процессоры

  1. Установить VIRTUALENV и создать виртуальное окружение для Django 2.2. Проверить его работу.
  2. Организовать выдачу сообщения об успешной отправке письма с кодом подтверждения в окне регистрации пользователя.
  3. Реализовать активацию пользователя при переходе по ссылке из письма.
  4. Создать контекстный процессор для корзины и скорректировать код контроллеров основного приложения.

Задание 2. Регистрация через социальную сеть. Django-ORM: связь один-к-одному

  1. Реализовать в проекте простой вариант аутентификации пользователя через социальную сеть Google+.
  2. Поработать со связью моделей «один-к-одному»: создать профиль пользователя и обеспечить возможность его редактирования.
  3. Реализовать автоматическое заполнение профиля пользователя при аутентификации через социальную сеть.
  4. Проверить работу исключения «AuthForbidden», например, задав при проверке минимальный возраст 100 лет.
  5. Получить и сохранить язык и URL-адрес страницы пользователя в социальной сети Google+.

Задание 3. Работа с заказом пользователя: CBV, Django formsets

  1. Создать выпадающее меню для ссылки на личный кабинет пользователя в меню.
  2. Создать приложение для работы с заказами пользователя.
  3. Создать контроллеры CRUD для заказа на базе Django CBV.
  4. Реализовать обновление статуса заказа при совершении покупки.
  5. Обновить контроллеры проекта – перевести на Django CBV.
  6. Организовать работу со статусом заказов в админке (имитация обработки заказа в магазине).

Задание 4. Работа с заказом пользователя: обновляем остатки товара, добавляем код jQuery

  1. Организовать работу с остатками товара в проекте.
  2. Реализовать обновление статистики заказа через jQuery.
  3. Расширить функционал работы с формами при помощи «django-dynamic-formset».
  4. Реализовать асинхронное обновление цены при добавлении нового продукта в заказ.

Задание 5. Развертывание Django-проекта на сервере

  1. Создать файл зависимостей «requirements.txt» для проекта.
  2. Экспортировать данные из базы.
  3. Установить и настроить VPS.
  4. Развернуть проект на сервере.

Задание 6. Профилирование и нагрузочное тестирование проекта, оптимизация работы с базой данных

  1. Установить приложение «django-debug-toolbar». Оценить время загрузки страниц. Найти самые медленные контроллеры. Заполнить таблицу с количеством запросов и дубликатов на страницах проекта.
  2. Визуализировать структуру моделей проекта при помощи «django_extensions», создать файл «geekshop_urls.txt» с URL-адресами проекта.
  3. Установить утилиту «siege» и провести функциональное тестирование. Зафиксировать результаты в текстовом файле (какие контроллеры работали с ошибками).
  4. Провести нагрузочное тестирование отдельных страниц и записать результаты в таблицу.
  5. Провести тестирование в режиме интернета. Записать данные в таблицу. Определить условия, при которых начинаются отказы.
  6. Провести оптимизацию работы с БД в проекте. Оценить эффект.

Задание 7. Еще быстрее: кеширование в Django

  1. Найти в проекте повторяющиеся вызовы методов для одного экземпляра модели и применить к ним декоратор «@cached_property». Оценить, насколько уменьшилось число дублей при выполнении SQL-запросов и каков прирост производительности.
  2. Применить тег «with» в одном из шаблонов. Оценить, насколько уменьшилось число дублей при выполнении SQL-запросов и каков прирост производительности.
  3. Установить и настроить приложение «Memcached». Реализовать кеширование на низком уровне для функций, возвращающих редко изменяющиеся данные (продукты каталога, список категорий и т.д.). Оценить прирост производительности.
  4. Реализовать кеширование в шаблоне для набора форм. Оценить эффект.
  5. Реализовать работу с некоторыми пунктами меню через AJAX и кешировать соответствующие страницы. Оценить эффект от применения технологии AJAX и эффект от кеширования.
  6. *Попробовать реализовать кеширование всего сайта в проекте. Оценить прирост производительности и возникающие при этом проблемы с обновлением контента.

Задание 8. Продвинутая работа с Django-ORM. Тестирование в Django

  1. Исправить баг при управлении активностью категории. Активность товаров тоже должна обновляться.
  2. Реализовать возможность сделать скидку на товары категории в админке при помощи метода «.upadate()».
  3. Поработать с F-объектом, убедиться, что обновление значений выполняется на уровне БД, а не в python-коде.
  4. Написать несколько запросов с логическим «ИЛИ». Написать сложный запрос в базу с использованием «conditional -expressions».
  5. Провести тестирование работоспособности одного из приложений.
  6. Протестировать процесс логина пользователя и переадресацию при доступе корзине.
  7. Исправить ошибку в функции «get_hot_product()».
  8. Написать тесты для методов моделей проекта.

About

Итоговый проект по курсам "Основы Django Framework" и "Django Framework. Инструменты оптимизации"

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 54.7%
  • HTML 23.6%
  • JavaScript 12.3%
  • CSS 9.4%