Aula 07 – Loja Virtual – Ecommerce – Django – Produto

More videos
Views
   

Loja Virtual – Ecommerce – Django –  Componente Produto

No django, um app é um componente de software.

Componente Produto

Componente Produto

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:

127.0.0.1:8000/admin/

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.

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

 

About The Author
-

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>