Criando uma aplicação

Um projeto pode ter várias aplicações. Nessa etapa, vamos criar uma aplicação de catálogo de veículos, na qual um cliente entra no sistema e procura informações sobre um carro, e definir os modelos de nossa aplicação. Antes disso, vamos estudar uma pequena introdução de Programação Orientada a Objetos.

Programação Orientada a Objetos

Programação Orientada a Objetos é um paradigma de programação em que o programador deixa de escrever sequências de instruções e passa a considerar objetos e como interagem entre si.

Objetos

Os objetos tem atributos e métodos. Podemos fazer uma analogia com um objeto carro, por exemplo. Um carro pode ter atributos como cor, velocidade, ano, marca, modelo, etc. Ele também pode ter métodos como andar, freiar, passar marcha, etc.

Classes

As classes definem um conjunto de objetos que tem atributos e métodos em comuns. Em vez de ficar reescrevendo várias vezes ou dando CTRL+C e CTRL+V para criar vários objetos, usa-se as classes. Os objetos que pertencem a essas classes, chamamos de instâncias dessa classe. Sendo assim, podemos escrever uma classe e, quando queremos obter uma instância dessa classe, basta escrever uma atribuição e escrever o nome da classe passando como parâmetros os atributos. Por exemplo:

    class Carro():
        Ligado = False

        def __init__(self, ano, marca, modelo, velocidade):
            self.Ano = ano
            self.Marca = marca
            self.Modelo = modelo
            self.Velocidade = velocidade


        def darPartida(self):
            self.Ligado = True

    def main():
        meucarro = Carro(2015, "Chevrolet", "Vectra", 220)
        outrocarro = Carro(1985, "volkswagen", "Fusca", 140)
        carrodiferente = Carro(2011, "Toyota", "Corolla", 270)

        meucarro.darPartida()

        return 0

    if __name__ == "__main__":
        main()

Definimos uma classe do tipo carro. Essa classe tem atributos (Ano, Marca, Modelo, velocidade e Ligado) e métodos (darPartida) comum a qualquer carro. Na função main criamos três objetos da mesma classe (meucarro, outrocarro e carrodiferente). Em seguida, chamamos o método darPartida() para o objeto meucarro, através da notação "meucarro.darPartida()".

O método __init__ é um método do tipo construtor. Quando atribuimos uma instância de uma classe à uma variável dentro da main, esse método é chamado automáticamente e atribui os valores passados como parâmetro à uma variável interna à classe. Dizemos que ele define os atributos iniciais.

Temos sempre que utilizar self. antes do nome da variável, em métodos, para dizer que é um atributo pertencente àquela classe.

Heranças

Podemos fazer com que uma classe herde atributos e métodos de outras classes. Por exemplo, a classe Humanos e a classe Elefantes herdam atributos e métodos da classe Mamíferos. A grande sacada é que as classes Humanos e Elefantes, herdam atributos e métodos comuns a todos os mamíferos. Atributos e métodos peculiares não são definidos na classe Mamíferos e fica a critério das outras classes "herdeiras" definí-los.

Como criar uma aplicação

Para criar uma aplicação dentro do seu projeto, abra o terminal novamente no diretório que contém o arquivo manage.py. Digite o seguinte comando (em vez de cliente, pode-se substituir pelo nome que preferir para sua aplicação):

~/Project/catalogo_de_carros$ python3 manage.py startapp cliente

Após criar o projeto, precisamos adicioná-lo ao arquivo settings.py. Abra o arquivo settings.py e insira cliente em INSTALLED_APPS, de maneira que fique assim:

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

Nossa aplicação já está criada. Agora precisamos definir os modelos para criar as tabelas no banco de dados.

Modelos

Para criar o nosso modelo, abra a pasta da sua aplicação (no nosso exemplo é a pasta cliente) e abra o arquivo models.py. Copie o código abaixo e cole em seu arquivo models.py:

    from django.db import models
    from PIL import Image 

    # Create your models here.

    class Carro(models.Model):
        Volkswagen = "Volkswagen"
        Chevrolet = "Chevrolet"
        Ford = "Ford"
        Fiat = "Fiat"
        CARS = (
            (Volkswagen, 'Volkswagen'),
            (Chevrolet, 'Chevrolet'),
            (Ford, 'Ford'),
            (Fiat, 'Fiat'),
        )

        Marca = models.CharField(max_length = 50, choices = CARS)
        Modelo = models.CharField(max_length = 50)
        Velocidade = models.IntegerField()
        Motor = models.DecimalField(max_digits = 9, decimal_places = 2)
        Potencia = models.IntegerField()
        Consumo = models.DecimalField(max_digits = 9, decimal_places = 2)
        Conforto = models.DecimalField(max_digits = 9, decimal_places = 2)
        Seguranca = models.DecimalField(max_digits = 9, decimal_places = 2)
        Ano = models.IntegerField()
        Ativo = models.NullBooleanField()
        Foto = models.ImageField(upload_to="img", max_length=500)

        def __str__(self):
            return self.Modelo
  • A biblioteca Pillow (PIL) é usada para adicionar imagens ao django através de Upload. Se não quiser usar o Pillow, pode-se remover o "from PIL import Image" e substiuir "Foto = models.ImageField(upload_to="img", max_length=500)" por "Foto = models.TextField()". Com isso, a imagem que disponibilizará no seu site, será exibida através de link de endereços de imagens.
  • A classe Carro herdou atributos e métodos da classe models.Model da biblioteca djangos.db. Com isso, é possível definir os campos e os tipos da nossa tabela do banco de dados.

Criando as tabelas no banco de dados

Já escrevemos o nosso modelo. Para criar as tabelas com base em nosso modelo, abra o terminal na pasta do projeto que contém o arquivo manage.py. Em seguida, digite:

~/Project/catalogo_de_carros$ python3 manage.py makemigrations cliente

Apos executar esse código, o Django pega o nosso modelo que escrevemos, coloca-o dentro de uma classe chamada Migration com um formato pronto para criar as tabelas, e salva em outro arquivo em uma pasta chamada migrations.

Para finalizar a criação de tabelas do banco de dados, digite o seguinte comando:

~/Project/catalogo_de_carros$ python3 manage.py migrate cliente