Giter Club home page Giter Club logo

product_shop's Introduction

Product Shop



Запуск 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 для работы в проекте. Для этого:

  • Создайте базу данных в ручном режиме.
  • Внесите изменения в настройки подключения.

Задание

В приложении каталога создайте модели:

  • 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 для заголовка;
  • после успешного редактирования записи необходимо перенаправлять пользователя на просмотр этой статьи.

Задание

Продолжаем работать с проектом из предыдущего домашнего задания. Для модели продуктов реализуйте механизм 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. 
Важно делать всё в одном месте, чтобы достичь единообразия 
в коде проекта и не запутаться впоследствии.

Задание

Создайте сервисную функцию, которая будет отвечать за выборку категорий и которую можно переиспользовать в любом месте системы. Добавьте низкоуровневое кеширование для списка категорий.

Задание

Вынесите необходимые настройки в переменные окружения и настройте проект для работы с ними.

product_shop's People

Contributors

svro2022 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.