Доброго времени суток! Многие из вас хотели бы научиться создавать интернет-магазины, так как это одна из самых прибыльных ниш в области веб-разработки. Естественно есть куча готовых решений, но если вы хотите узнать как это работает, то следует самому попробовать пройти этот путь с самого начала и до конца. Я ранее не создавал подобного рода проекты на django, в моей компетенции только блоги, и для меня это будет также в новинку, как и для многих из вас, но я думаю, что пора django осилить это путь. В этом цикле статей я буду преследовать следующие цели:

  • Создание каталога продуктов
  • Создание корзины покупателя
  • Управление заказами
  • Интеграция систем оплаты
  • Экспортирование заказов в формате CSV
  • Создание панели администрирования заказами для пользователя
  • Создание системы купонов
  • Интернационализация проекта
  • Создание системы рекомендаций

Подготовка Django

Первым делом настроим проект так, чтобы потом у нас было все хорошо. Поставим виртуальное окружение. У меня в домашней директории находится папка для виртуальных окружение python_env, создадим в ней папку для окружения нашего магазина:

$ cd /python_env/
$ mkdir python_shop_env
$ source python_shop_env/bin/activate

Последней командой мы активировали окружение и теперь мы можем свободно устанавливать пакеты в наше приложение. Первым делом установим Django и создадим приложение:

$ pip install Django
$ django-admin startproject myshop
$ cd myshop
$ django-admin startapp shop

Эта команда установит Django. Я буду использовать последнюю стабильную версию Django-1.9.7. Мы начали наш проект myshop и создали первое приложение shop. Добавим наше приложение в settings.py в INSTALLED_APPS:

INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'shop', ]

Теперь, когда наше приложение готово к разработке, первым делом нам надо определится с моделью категорий и продукта. Давайте их создадим, для этого откроем файл models.py из каталога shop и напишем в нем следующее:

from django.db import models # Модель категории class Category(models.Model): name = models.CharField(max_length=200, db_index=True) slug = models.SlugField(max_length=200, db_index=True, unique=True) class Meta: ordering = ['name'] verbose_name = 'Категория' verbose_name_plural = 'Категории' def __str__(self): return self.name # Модель продукта class Product(models.Model): category = models.ForeignKey(Category, related_name='products', verbose_name="Категория") name = models.CharField(max_length=200, db_index=True, verbose_name="Название") slug = models.SlugField(max_length=200, db_index=True) image = models.ImageField(upload_to='products/%Y/%m/%d/', blank=True, verbose_name="Изображение товара") description = models.TextField(blank=True, verbose_name="Описание") price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="Цена") stock = models.PositiveIntegerField(verbose_name="На складе") available = models.BooleanField(default=True, verbose_name="Доступен") created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) class Meta: ordering = ['name'] index_together = [ ['id', 'slug'] ] def __str__(self): return self.name

Категория содержит два поля, имя и подпись. Атрибут unique будет следить за тем, чтобы не было дублирования категорий. В классе Meta переменная ordering отвечает за вывод категорий по умолчанию, без изменения запроса. Рассмотрим модель Product:

  • name - название товара
  • category - категория товара, связана с продуктом связью: один-ко-многим
  • image - изображение товара,где products/%Y/%m/%d/ - папка куда будет загружено изображение
  • description - описание товара
  • price - цена. Используется тип поля DecimalField так как он обеспечивает точное значение цены
  • stock - запас товаров на складе
  • created - дата создания товара
  • updated - дата обновления товара

Для удобной работы с изображениями нам следует установить библиотеку Pillow используя pip:

$ pip install Pillow

Теперь настала пора синхронизации БД c нашими моделями. Я не буду использовать в качестве БД sqlite3, так как моя задача научиться создавать интернет-магазин и это тестовая площадка.

$ python manage.py makemigrations
$ python manage.py migrate

На сегодня достаточно. Мы сделали нашу основу, а именно модели, в будущем планирую настроить отображение в админке, после чего будем работать со вьюхами, будет интересно.

Репозиторий проекта: github


Источник: http://dikiigrigorii.ru/blog/article/internet-magazin-na-django-sozdanie-modelej-chast-1/9/


Поделись с друзьями



Рекомендуем посмотреть ещё:


Закрыть ... [X]

Django учебник Часть 3: Использование моделей - Изучение Веб-разработки Подарочное издание книг афоризмы

Django как связать модели Python / Django - Как правильно связать комментарии с новостями в Django?
Django как связать модели Python - Получить все связанные объекты модели Django - Qaru
Django как связать модели Интернет-магазин на Django. Создание моделей. Часть 1
Django как связать модели Django - Урок 003. Модель, шаблон и представление в Django
Django как связать модели Как на django сделать вывод из связанных моделей?
Django как связать модели Перевод Django Documentation: Models. Part 1 / Хабрахабр


ШОКИРУЮЩИЕ НОВОСТИ