Aula 07 – Loja Virtual – Ecommerce – Django – Produto
Aula 07 – Loja Virtual – Ecommerce – Django – Produto
Loja Virtual – Ecommerce – Django – Componente Produto
No django, um app é um componente de software.

Componente Produto
Voltar para página principal do blog
Todas as aulas desse curso
Aula 06 Aula 08
Para baixar o código como está até agora, acesse o link abaixo:
https://github.com/toticavalcanti/django_ecommerce/tree/create_app_product/e_commerce
Curta a página do Código Fluente no Facebook
https://www.facebook.com/Codigofluente-338485370069035/
Vou deixar meu link de referidos na digitalocean pra vocês.
Quem se cadastrar por esse link, ganha $100.00 dólares de crédito na digitalocean:
Digital Ocean
Esse outro link é da one.com:
One.com
Componente Produto
Agora vamos ver tudo o que precisamos para lidar com os produtos: armazenar os dados a respeito dos produtos no banco, mostrar os produtos em uma lista ou individualmente, permitir o upload de imagens referentes ao produto, etc.
Iremos desenvolver o componente Product.
Componente de software no django é chamado de App, portanto, iremos criar o app product.
O django é uma aplicação web composta por várias outras aplicações (app), ou seja, por vários componentes de software.
Quando desenvolvemos a nossa aplicação, fazemos o mesmo, utilizamos vários componentes de software já prontos.
Um app, isto é, um componente, deve ser bem específico, deve ser especialista em fazer algo muito bem e de forma eficiente.
Quando criamos uma aplicação django, no settings.py da nossa aplicação, em INSTALLED_APPS, por padrão, o django já põe na aplicação criada, várias outras aplicações do próprio django.
Por exemplo, django.contrib.auth é um app do django, responsável por nos ajudar na parte de autenticação, ela já vem pronta, e a especialidade dessa dela é fazer de forma eficiente e segura toda a parte de autenticação do usuário, login, logout, etc.
Para criar nosso componente Produto, usaremos:
python manage.py startapp products
CRUD
Vamos falar rapidamente sobre CRUD (Create, Retrieve, Update, Delete).
CRUD são as ações dentro do banco de dados:
- Create tá relacionado com o método http POST
- Retrieve / List / search tá relacionado com o método http GET
- Update tá relacionado com o método http PUT / PATCH
- Delete tá relacionado com o método http DELETE
Modelo Product
Agora criaremos o modelo Product, um model conecta o django ao banco de dados.
Cada modelo é uma classe Python que herda de django.db.models.Model.
Cada atributo de um modelo representa um campo no banco de dados.
Para saber mais detalhes sobre campos dos modelos acesse a documentação oficial:
https://docs.djangoproject.com/en/2.1/ref/models/fields/
Em src/products/models.py coloque:
from django.db import models
# Create your models here.
class Product(models.Model): #product_category
title = models.CharField(max_length=120)
description = models.TextField()
price = models.DecimalField(decimal_places=2, max_digits=20, default=100.00)
No src/e_commerce/settings.py insira o app product em INSTALLED_APPS.
"""
Django settings for ecommerce project.
Generated by 'django-admin startproject' using Django 2.1.3.
For more information on this file, see
https://docs.djangoproject.com/en/2.1/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.1/ref/settings/
"""
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '59dax*+7ca^y4u_ivn&bpeim_*e(y07%ywl_niaz4-fq8utd!-'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
#our apps
'products'
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'ecommerce.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'ecommerce.wsgi.application'
# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# Password validation
# https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/2.1/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static_my_project"),
]
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static_cdn", "static_root")
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static_cdn", "media_root")
Em src/products/admin.py coloque o seguinte conteúdo:
from django.contrib import admin
from .models import Product
admin.site.register(Product)
Levante o servidor local com:
python manage.py runserver
Acesse:
Veja que em Site administration tem uma nova seção chamada Products.
Se você clicar nela, poderá adicionar produtos.
Vamos adicionar o produto camiseta:
- Title: Camiseta
- Description: Essa camiseta é uma edição limitada, é exclusiva e apenas algumas unidades estão disponíveis.
- Price: 127.00
Vamos adicionar outro produto, tênis:
- Title: Tênis
- Description: Esse tênis possui uma tecnologia inovadora que garantem conforto e alto desempenho esportivo.
- Price: 325.00
Pelo painel administrativo você consegue fazer as operações de CRUD, com o componente Product.
Veja que os produtos são mostrados como Product object no painel administrativo.
Modifique src/products/models.py para que fique assim:
from django.db import models
# Create your models here.
class Product(models.Model): #product_category
title = models.CharField(max_length=120)
description = models.TextField()
price = models.DecimalField(decimal_places=2, max_digits=20, default=100.00)
#python 3
def __str__(self):
return self.title
#python 2
def __unicode__(self):
return self.title
Derrube o servidor com ctrl + c
Rode as migrações pra repercutir as alterações do modelo no banco de dados:
python manage.py makemigrations
python manage.py migrate
Suba novamente o servidor:
python manage.py runserver
Dê um refresh na página de admin, e veja que ao invés de Product object, agora aparece o title de cada produto, resultado da saída da função __str__ no caso do python3 ou __unicode__ no python 2.
A página de administração é uma página fechada, apenas para um pequeno time que trabalha para o site, usuários com permissões de cadastrar novos produtos no sistema, etc.
Se você tem um time acima de 50 pessoas, você provavelmente não irá utilizar a página de admin da sua loja para todas essas pessoa, você provavelmente vai querer construir uma página administrativa mais específica para esse time.
Não se preocupe com isso por enquanto, basta ter isso em mente quando você seguir em frente nos estudos e projetos que desenvolver.
Na próxima aula, iremos construir uma forma para que os usuários que visitam o site, usuários comuns, consigam ver os produtos da loja.
Aula 06 Aula 08
Todas as aulas desse curso
Voltar para página principal do blog
Curta a página do Código Fluente no Facebook
https://www.facebook.com/Codigofluente-338485370069035/
Vou deixar meu link de referidos na digitalocean pra vocês.
Quem se cadastrar por esse link, ganha $100.00 dólares de crédito na digitalocean:
Digital Ocean
Esse outro link é da one.com:
One.com
Para baixar o código como está até agora, acesse o link abaixo:
https://github.com/toticavalcanti/django_ecommerce/tree/create_app_product/e_commerce
Obrigado, até a próxima e bons estudos. 😉