GithubHelp home page GithubHelp logo

pharmacy's Introduction

Проект онлайн-магазин

Постановка задачи

Цитата из wiki.cs.hse.ru:

Сервис состоит из: витрины/каталога товаров, разбитых по категориям; корзины, в которую пользователь может добавлять покупки; для электронных товаров реализована возможность скачать (или получить по почте) и оплата с помощью PayPal (наиболее простой для интеграции, для проекта достаточно показать работу с разработческим апи PayPal) или другими системами оплаты. Для неэлектронных товаров должна быть возможность указать их наличие, при покупке количество изменяется. В магазине могут быть промоакции: скидка при оформлении заказа по промокоду, скидка при заказе на определенную сумму, временная скидка на конкретную категорию товаров.

Реализация критериев

Минимальная функциональность:

  • Витрина магазина с категориями
  • Корзина пользователя, в которую можно добавлять или удалять товары.
  • После оформления заказа, письмо с данными о заказе и пользователе отправляется на почту владельца магазина
  • Приложение защищено от инъекций к базе

На хорошо:

  • Приложение работает с неэлектронными товарами, меняется количество доступного товара.
  • Приложение защищено от XSS-атак.

На отлично:

  • В приложении есть возможность оплатить с помощью сервисов онлайн-платежей.
  • Сервис готов к запуску (по чеклисту выполнено все или почти все)

Реализованные возможности

  • Динамически изменяющийся каталог, где отображаются товары, отсортированные по категориям. Товар всегда можно положить в корзину прямо из каталога.
  • На отдельной страничке товара даны более полные его характеристики. Оттуда также можно положить товар в корзину.
  • Корзина, в которой присутствует вся необходимая информация: список товаров, их количество, цена каждого товара и суммарная стоимость заказа. Также можно менять количество покупаемых товаров. Корзина сохраняется даже если пользователь закрыл браузер и потом вновь вернулся на сайт.
  • Оплата производится при помощи системы онлайн-платежей PayPal. При этом если пользователь попытается купить товар в количестве, превосходящем имеющееся, этот товар будет исключен из корзины.
  • Пользователь может просмотреть отсортированную по времени историю покупок

Модели

В соответствии со стандартом Django, классы моделей, используемые в проекте, были реализованы в файле models.py:

  • Category — категория товара
  • Product — товар. Каждый товар может быть связан с одной или несколькими категориями. Количество товаров может меняться
  • ProductImage — изображение товара (не была задействована в проекте из-за технических сложностей)
  • SelectedProduct — товар, купленный пользователем

Более подробно о моделях и их взаимосвязях можно узнать из файла pharmacy-db.

Шаблоны

  • base.html — оболочка для остальных страниц, содержащая верхнее меню, подключаемая при помощи {% extends ... %}
  • cart.html — корзина пользователя
  • catalogue.html — каталог товаров
  • help.html — страничка со справкой для покупателя
  • history.html — история заказов пользователя
  • index.html — главная страница магазина
  • item.html — страница конкретного товара
  • payment.html — страница оплаты, содержащая ссылку на форму оплаты paypal
  • registration/login.html — страница логина пользователя
  • registration/registration_form.html — страница регистрации пользователя

Работа бэкенда

Осуществляется при помощи стандартных способов фреймворка Django. Для получения обратной связи посланный пользователем запрос идентифицируется с паттерном внутри файла urls.py. Затем аргументы передаются на вход соответствующей функции в views.py, которая, обработав запрос, либо возвращает новую страницу, либо обновляет текущую.

Приведем пример. Пусть пользователь находится в каталоге и хочет выбрать категорию товаров 'Y' с slug 'x' и просмотреть товары, к ней относящиеся. Ссылка выглядит как catalogue/x. Она удовлетворяет одному из паттернов в urls.py:

url(r'^catalogue/(?P<slug>.*)$', CatalogueView.as_view(), name='catalogue')

Далее вызывается метод get_context_data класса CatalogueView из файла views.py:

class CatalogueView(TemplateView):
    template_name = 'catalogue.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['categories'] = Category.objects.all()
        if kwargs['slug']:
            category = get_object_or_404(Category, slug=kwargs['slug'])
            context['products'] = category.products.all()
        else:
            context['products'] = Product.objects.all()
        return context

Так как в данной ситуации slug был определен, выполняется условие if'а, выбирается категория, соответствующая данному slug'у, и передается список товаров, связанных с данной категорией. Если категория с таким slug'ом найдена не будет, вернется ошибка 404. Если же был совершен просто переход в каталог, в нем будут выведены все имеющиеся товары.

pharmacy's People

Contributors

mneeko 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.