В части курса "Основы Django Framework" разработана серверная часть для интернет-магазина. Реализованы собственная админка, пользователи, страницы товаров и корзина.
Подробный перечень решенных задач:
- Подготовить исходники для проекта – 3 страницы из верстки магазина, и разместить их в одной папке.
- Установить Django и PyCharm. Создать проект и в нем приложение «mainapp». Проверить, что все работает.
- Разместить шаблоны и статические файлы в соответствующих папках. Настроить проект – файл settings.py. Отредактировать файл диспетчера URL-адресов urls.py.
- Написать функции-обработчики для всех страниц – файл views.py в приложении «mainapp». Проверить работу всех страниц проекта в черновом режиме (без стилей и изображений).
- Откорректировать пути к статическим файлам и адреса гиперссылок в меню. Проверить, что все работает как положено (стили и изображения грузятся, гиперссылки работают).
- Сделать файл run.bat для быстрого запуска Django-сервера.
- Реализовать наследование шаблонов в проекте. Меню подключить как подшаблон.
- Реализовать в проекте механизмы работы со статическими файлами и URL-адресами, которые прошли на уроке.
- Поработать с шаблонными тегами и фильтрами (заглавные буквы, вывод текущей даты в шаблоне).
- Организовать вывод динамического контента на страницах (элементы меню, список товара, заголовок страницы).
- Настроить проект для работы с медиафайлами.
- Создать модели в проекте (обязательно должно быть поле с изображениями) и выполнить миграции.
- Поработать с моделями в консоли.
- Создать суперпользователя. Настроить админку и поработать в ней.
- Организовать работу с моделями в контроллерах и шаблонах.
- Реализовать автоматическое формирование меню категорий по данным из модели.
- Создать модель пользователя в проекте. Обязательно добавить поле с изображением и возрастом. Выполнить настройки в файле конфигурации.
- Организовать загрузку данных в БД из файла.
- Реализовать механизм аутентификации в проекте.
- Реализовать механизм регистрации пользователя.
- Организовать просмотр и редактирование данных пользователем.
- Разобраться с механизмом валидации данных формы. Создать свои валидаторы.
- Поработать с запросами в консоли через механизм Django ORM.
- Реализовать механизм вывода товаров по категориям.
- Организовать динамическую генерацию меню категорий и подсветку выбранной категории.
- Создать приложение корзины.
- Реализовать механизм добавления товара в корзину.
- Вывести в меню счетчик купленных товаров.
- Написать в модели корзины методы для определения общего количества и стоимости добавленных товаров. Вывести эти величины в меню вместо счетчика, сделанного на уроке.
- Добавить к модели корзины методы и вывести в меню количество товара и их полную стоимость.
- Реализовать механизм просмотра содержимого корзины и удаления товаров из нее.
- Реализовать просмотр товара, скорректировать адреса в каталоге и на главной странице так, чтобы при нажатии на товар появлялась страница просмотра. Добавление товара в корзину теперь должно быть только с этой страницы.
- Защитить доступ к корзине декоратором @login_required.
- Реализовать асинхронное редактирование количества товаров в корзине при помощи AJAX.
- Реализовать механизм вывода случайного товара на странице «горячее предложение», которая появляется при входе в каталог.
- Создать приложение админки и интегрировать его в проект.
- Реализовать механизм CRUD для объектов пользователей магазина. Можно полностью удалять объекты (не использовать свойство is_active).
- Реализовать механизм CRUD для объектов категорий товара. Можно полностью удалять объекты (не использовать свойство is_active).
- Защитить доступ к админке декоратором @user_passes_test.
- Реализовать удаление через свойство is_active.
- Реализовать «подсветку» в админке неактивных объектов пользователей и категорий.
- Реализовать работу с товарами в админке.
- Организовать постраничный вывод в каталоге и админке.
- Перевести как можно больше контроллеров в проекте на CBV (минимум по одному для каждого из рассмотренных классов).
- Написать свои шаблонные фильтры и применить их.
Далее в курсе «Django Framework. Инструменты оптимизации», продолжена работа над интернет-магазином. Реализовано взаимодействовие сайта с пользователем (отправка email, принятие регистрации через социальные сети, обработка заказов), проведено тестирование проекта и временное развертывание его на VPS.
Подробный перечень решенных задач:
- Установить VIRTUALENV и создать виртуальное окружение для Django 2.2. Проверить его работу.
- Организовать выдачу сообщения об успешной отправке письма с кодом подтверждения в окне регистрации пользователя.
- Реализовать активацию пользователя при переходе по ссылке из письма.
- Создать контекстный процессор для корзины и скорректировать код контроллеров основного приложения.
- Реализовать в проекте простой вариант аутентификации пользователя через социальную сеть Google+.
- Поработать со связью моделей «один-к-одному»: создать профиль пользователя и обеспечить возможность его редактирования.
- Реализовать автоматическое заполнение профиля пользователя при аутентификации через социальную сеть.
- Проверить работу исключения «AuthForbidden», например, задав при проверке минимальный возраст 100 лет.
- Получить и сохранить язык и URL-адрес страницы пользователя в социальной сети Google+.
- Создать выпадающее меню для ссылки на личный кабинет пользователя в меню.
- Создать приложение для работы с заказами пользователя.
- Создать контроллеры CRUD для заказа на базе Django CBV.
- Реализовать обновление статуса заказа при совершении покупки.
- Обновить контроллеры проекта – перевести на Django CBV.
- Организовать работу со статусом заказов в админке (имитация обработки заказа в магазине).
- Организовать работу с остатками товара в проекте.
- Реализовать обновление статистики заказа через jQuery.
- Расширить функционал работы с формами при помощи «django-dynamic-formset».
- Реализовать асинхронное обновление цены при добавлении нового продукта в заказ.
- Создать файл зависимостей «requirements.txt» для проекта.
- Экспортировать данные из базы.
- Установить и настроить VPS.
- Развернуть проект на сервере.
- Установить приложение «django-debug-toolbar». Оценить время загрузки страниц. Найти самые медленные контроллеры. Заполнить таблицу с количеством запросов и дубликатов на страницах проекта.
- Визуализировать структуру моделей проекта при помощи «django_extensions», создать файл «geekshop_urls.txt» с URL-адресами проекта.
- Установить утилиту «siege» и провести функциональное тестирование. Зафиксировать результаты в текстовом файле (какие контроллеры работали с ошибками).
- Провести нагрузочное тестирование отдельных страниц и записать результаты в таблицу.
- Провести тестирование в режиме интернета. Записать данные в таблицу. Определить условия, при которых начинаются отказы.
- Провести оптимизацию работы с БД в проекте. Оценить эффект.
- Найти в проекте повторяющиеся вызовы методов для одного экземпляра модели и применить к ним декоратор «@cached_property». Оценить, насколько уменьшилось число дублей при выполнении SQL-запросов и каков прирост производительности.
- Применить тег «with» в одном из шаблонов. Оценить, насколько уменьшилось число дублей при выполнении SQL-запросов и каков прирост производительности.
- Установить и настроить приложение «Memcached». Реализовать кеширование на низком уровне для функций, возвращающих редко изменяющиеся данные (продукты каталога, список категорий и т.д.). Оценить прирост производительности.
- Реализовать кеширование в шаблоне для набора форм. Оценить эффект.
- Реализовать работу с некоторыми пунктами меню через AJAX и кешировать соответствующие страницы. Оценить эффект от применения технологии AJAX и эффект от кеширования.
- *Попробовать реализовать кеширование всего сайта в проекте. Оценить прирост производительности и возникающие при этом проблемы с обновлением контента.
- Исправить баг при управлении активностью категории. Активность товаров тоже должна обновляться.
- Реализовать возможность сделать скидку на товары категории в админке при помощи метода «.upadate()».
- Поработать с F-объектом, убедиться, что обновление значений выполняется на уровне БД, а не в python-коде.
- Написать несколько запросов с логическим «ИЛИ». Написать сложный запрос в базу с использованием «conditional -expressions».
- Провести тестирование работоспособности одного из приложений.
- Протестировать процесс логина пользователя и переадресацию при доступе корзине.
- Исправить ошибку в функции «get_hot_product()».
- Написать тесты для методов моделей проекта.