Запуск Jango проекта через Run - "название проекта" или командой python manage.py runserver
Остановить сервер - CTRL+C
- Python
- Bootstrap
- Django
- PostgreSQL
- Redis
Проект интернет-магазина.
Задание
Для начала работы над задачей выполните первые шаги:
- Настройте виртуальное окружение.
- Создайте новый Django-проект.
Задание
- После успешного создания проекта сделайте первую настройку.
Для этого cоздайте первое приложение с названием
catalog. - Внесите начальные настройки проекта.
- Сделайте настройку урлов (URL-файлов) для нового приложения.
Задание
- Подготовьте два шаблона для домашней страницы и страницы с контактной информацией.
Для создания шаблонов лучше использовать UIkit Bootstrap.
Это удобный набор элементов, которые уже стилизованы и готовы к использованию.
UIkit Bootstrap помогает избежать самостоятельной верстки макетов.
Если возникнут проблемы при создании собственного интерфейса,
возьмите за основу данный шаблон: https://github.com/oscarbotru/.Задание
В приложении в контроллере реализуйте два контроллера:
- Контроллер, который отвечает за отображение домашней страницы.
- Контроллер, который отвечает за отображение контактной информации.
Дополнительное задание
Реализуйте обработку сбора обратной связи от пользователя, который зашел на страницу контактов и отправил свои данные для обратной связи.
Задание
Подключите СУБД PostgreSQL для работы в проекте. Для этого:
- Создайте базу данных в ручном режиме.
- Внесите изменения в настройки подключения.
Задание
В приложении каталога создайте модели:
ProductCategory
Опишите для них начальные настройки.
Задание
Для каждой модели опишите следующие поля:
Product:
- наименование,
- описание,
- изображение (превью),
- категория,
- цена за покупку,
- дата создания,
- дата последнего изменения.
Category:
- наименование,
- описание.
Для поля с изображением необходимо
добавить соответствующие настройки в проект, а также
установить библиотеку для работы с изображениями Pillow.Задание
Перенесите отображение моделей в базу данных с помощью инструмента миграций. Для этого:
- Создайте миграции для новых моделей.
- Примените миграции.
- Внесите изменения в модель категорий, добавьте поле
created_at, примените обновление структуры с помощью миграций. - Откатите миграцию до состояния, когда поле
created_atдля модели категории еще не существовало, и удалите лишнюю миграцию.
Задание
Для моделей категории и продукта настройте отображение в административной панели. Для категорий выведите id и наименование в список отображения, а для продуктов выведите в список id, название, цену и категорию.
При этом интерфейс вывода продуктов настройте так, чтобы можно было результат отображения фильтровать по категории, а также осуществлять поиск по названию и полю описания.
Задание
- Через инструмент shell заполните список категорий, а также выберите список категорий, применив произвольные рассмотренные фильтры. В качестве решения приложите скриншот.
- Сформируйте фикстуры для заполнения базы данных.
- Напишите кастомную команду, которая умеет заполнять данные в базу данных, при этом предварительно зачищать ее от старых данных.
Последний пункт можно реализовать в связке с инструментом
работы с фикстурами, можно описать вставку данных отдельными запросами.Задание
Создайте новый контроллер и шаблон, которые будут отвечать за отображение отдельной страницы с товаром. На странице с товаром необходимо вывести всю информацию о товаре.
Для создания шаблонов используйте UI kit Bootstrap.
При возникновении проблем возьмите за основу данный шаблон.
https://github.com/oscarbotru/skystore-templatesЗадание
В созданный ранее шаблон для главной страницы выведите список товаров в цикле.
Задание
Из-за расширения количества шаблонов появляется слишком много повторяющегося кода, поэтому выделите общий (базовый) шаблон.
Задание
Для выводимого изображения на странице реализуйте шаблонный фильтр, который преобразует переданный путь в полный путь для доступа к медиафайлу:
<!-- Исходный вариант -->
<img src="/media/{{ object.image }}" />
<!-- Итоговый вариант -->
<img src="{{ object.image|mediapath }}" />Задание
Продолжаем работать с проектом из предыдущего домашнего задания. Переведите имеющиеся контроллеры с FBV на CBV.
Задание
Создайте новую модель блоговой записи со следующими полями:
- заголовок,
- slug (реализовать через CharField),
- содержимое,
- превью (изображение),
- дата создания,
- признак публикации,
- количество просмотров.
Для работы с блогом реализуйте CRUD для новой модели.
Slug — человекопонятный URL,
представляет собой набор символов, которые можно прочитать
как связные слова или предложения в адресной строке,
служит уникальным идентификатором записи в рамках одной модели
и состоит из безопасных для обработки запроса символов:
0-9,
a-z (обычно в нижнем регистре),
символ -.Задание
Модифицируйте вывод и обработку запросов, добавив следующую логику на уровне контроллеров:
- при открытии отдельной статьи увеличивать счетчик просмотров;
- выводить в список статей только те, которые имеют положительный признак публикации;
- при создании динамически формировать slug name для заголовка;
- после успешного редактирования записи необходимо перенаправлять пользователя на просмотр этой статьи.
Задание
Продолжаем работать с проектом из предыдущего домашнего задания. Для модели продуктов реализуйте механизм CRUD, задействовав модуль
django.forms.
Условия для пользователей:
- могут создавать новые продукты;
- не могут загружать запрещенные продукты на платформу.
Для исключения загрузки запрещенных продуктов реализуйте валидацию названия и описания продукта таким образом, чтобы нельзя было в них добавлять слова:
казино, криптовалюта, крипта, биржа, дешево,
бесплатно, обман, полиция, радар.Задание
Добавьте новую модель «Версия», которая должна содержать следующие поля:
- продукт,
- номер версии,
- название версии,
- признак текущей версии.
При наличии активной версии реализуйте вывод в список продуктов информации об активной версии.
Задание
Для формы работы с продуктом добавьте реализацию работы с формсетами для версий продукта. При этом версия может быть внесена только в существующий продукт.
Все созданные формы нужно стилизовать так, чтобы они были в единой стилистике оформления всей платформы. Для этого можно воспользоваться методом init либо самостоятельно изучить пакет crispy-forms: https://pypi.org/project/django-crispy-forms/.
Задание
Создайте новое приложение «User» для работы с пользователем. Определите собственную форму для пользователя, при этом задайте электронную почту как поле для авторизации.
Также добавьте поля:
- «Аватар»,
- «Номер телефона»,
- «Страна».
Задание
В сервисе реализуйте функционал аутентификации, а именно:
- регистрацию пользователя по почте и паролю;
- верификацию почты пользователя через отправленное письмо;
- авторизацию пользователя;
- восстановление пользователя на автоматически сгенерированный пароль.
Задание
Закройте для анонимных пользователей все контроллеры, которые отвечают за работу с продуктами. При этом создаваемые продукты должны автоматически привязываться к авторизованному пользователю.
Не забудьте добавить поле для продуктов,
через которое пользователь будет привязываться.
Текущий авторизованный пользователь доступен
в любом контроллере через self.request.user.Задание
Добавьте интерфейс редактирования профиля пользователя.
Задание
Продолжаем работать с проектом. Создайте группу для роли модератора и опишите необходимые доступы:
- может отменять публикацию продукта,
- может менять описание любого продукта,
- может менять категорию любого продукта.
Недостающее поле признака публикации необходимо добавить
таким образом, чтобы можно было определять статус продукта.
Можно использовать BooleanField со значением False
по умолчанию или CharField с указанием вариантов значений
(choises).
При этом по умолчанию должен быть вариант,
который не предполагает публикацию продукта.Задание
Реализуйте решение, которое проверит, что редактирование продукта доступно только его владельцу.
Задание
Продолжаем работать с проектом. Установите брокер для кеширования Redis. Внесите необходимые настройки и проверьте работоспособность проекта с новыми настройками.
Задание
Настройте кеширование всего контроллера отображения данных относительно одного продукта.
Помните, что кеширование можно подключать не только
в файле views.py, но и в файле маршрутизации urls.py.
Важно делать всё в одном месте, чтобы достичь единообразия
в коде проекта и не запутаться впоследствии.Задание
Создайте сервисную функцию, которая будет отвечать за выборку категорий и которую можно переиспользовать в любом месте системы. Добавьте низкоуровневое кеширование для списка категорий.
Задание
Вынесите необходимые настройки в переменные окружения и настройте проект для работы с ними.