Запуск Jango проекта через Run - "название проекта" или командой python manage.py runserver
homework_django - config проекта
catalog - первое приложение проекта
- Python
- Bootstrap
- Django
- PostgreSQL
Создать проект интернет-магазина, который будете дорабатывать на каждом уроке в течение всего курса. Выполняйте каждое домашнее задание — и в конце курса у вас получится полноценный проект, который вы добавите в свое портфолио.
Задание
Для начала работы над задачей выполните первые шаги:
- Настройте виртуальное окружение.
- Создайте новый Django-проект.
Задание
- После успешного создания проекта сделайте первую настройку.
Для этого cоздайте первое приложение с названием
catalog
. - Внесите начальные настройки проекта.
- Сделайте настройку урлов (URL-файлов) для нового приложения.
Задание
- Подготовьте два шаблона для домашней страницы и страницы с контактной информацией.
Для создания шаблонов лучше использовать UIkit Bootstrap.
Это удобный набор элементов, которые уже стилизованы и готовы к использованию.
UIkit Bootstrap помогает избежать самостоятельной верстки макетов.
Если возникнут проблемы при создании собственного интерфейса,
возьмите за основу данный шаблон: https://github.com/oscarbotru/.
Задание
В приложении в контроллере реализуйте два контроллера:
- Контроллер, который отвечает за отображение домашней страницы.
- Контроллер, который отвечает за отображение контактной информации.
Дополнительное задание
Реализуйте обработку сбора обратной связи от пользователя, который зашел на страницу контактов и отправил свои данные для обратной связи.
Задание
Подключите СУБД PostgreSQL для работы в проекте. Для этого:
- Создайте базу данных в ручном режиме.
- Внесите изменения в настройки подключения.
Задание
В приложении каталога создайте модели:
Product
Category
Опишите для них начальные настройки.
Задание
Для каждой модели опишите следующие поля:
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 для заголовка;
- после успешного редактирования записи необходимо перенаправлять пользователя на просмотр этой статьи.