28
Models em Detalhes parte 1 Prof. Fellipe Aleixo ([email protected])

diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Models em Detalhes

parte 1

Prof. Fellipe Aleixo ([email protected])

Page 2: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Classes de Modelo

•Representam classes de domínio segundo a metodologia orientada a objetos§Expressam conceitos do domínio do problema§Tem responsabilidades (conhecimento e comportamento)§Blocos de construção de aplicações Django (princípio DRY)§Mapeadas em tabelas de banco de dados (ORM)

Page 3: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Classes de Modelo

•Fornecem base para simplificar a criação de vários aspectos de uma aplicação Django:§Formulários (forms)§Classes de visão (class-based views)§Serviços REST§Páginas de administração do Django

Page 4: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Armazenamento Persistente

•A estratégia de persistência primária no Django é através de banco de dados relacional§Cada classe de modelo é mapeada (ORM) em uma tabela

específica e cada atributo em uma coluna da mesma§SQLite, PostgreSQL, MySQL ou Oracle

•Cada classe de modelo no Django é subclasse de django.bd.models.Model§Possibilita uma série de métodos para a interação com o

banco de dados

Page 5: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Primeiro Exemplo

•Definição da classe:

Page 6: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Primeiro Exemplo

•Possível tabela gerada:

§Nome da tabela: nome da aplicação + nome da classe§Campo “id” é acrescentado automaticamente§O SQL depende da configuração de banco utilizada

Page 7: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Usando Modelos

•Com as classes de modelo definidas, o Djangoprecisa ser informado que os mesmos serão usados§ Inclusão do módulo no INSTALLED_APPS

•Por exemplo: se as classes de modelo de uma aplicação estiverem em um módulo myapp.models

Page 8: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Campos

•A única parte obrigatória em uma classe de modelo é a definição dos seus atributos•Ex.:

Page 9: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Tipos de Campos

•Devem ser instanciados da classe Field apropriada§Define como o banco de dados armazenará§Define qual será o campo de formulário HTML específico§Define os requisitos de validação mínimos (formulários)

• Exemplos:

•Mais referências: https://docs.djangoproject.com/pt-br/2.2/ref/models/fields/#model-field-types

Tipo de Campo Descrição

AutoField Um campo IntegerField que é inserido automaticamente (incrementando o anterior)

BinaryField Apto a receber uma sequência de bytes

BooleanField Apto a receber booleanos – true ou false

Page 10: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Opções em Campos Específicos

•Cada campo pode receber um conjunto de argumentos específicos

•Exemplo: §um CharField (e subclasses) requerem um argumento

max_length (comprimento do VARCHAR no banco)

•A seguir, veremos alguns argumentos, dentre os mais utilizados

Page 11: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Opções em Campos Específicos

Argumento Descrição

null se True, indica que utilizará valores vazios como NULL no banco de dados (o padrão é False)

blank se True, permite campo ficar em banco (o padrão é False)

choices são utilizados valores pré-definidos (tuplas)

default define um valor padrão para o campo

help_text texto de ajuda a ser exibido no campo de formulário associado

primary_key se True, indica que o campo será chave primária do modelo

unique se True, indica que o valor do campo será único na tabela

Page 12: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Opções em Campos Específicos

•Exemplo de utilização de valores pré-definidos:

Page 13: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Chave Primária

•Por padrão, o Django fornece um atributo chave

§Valor inteiro com auto incremento

•Para especificar uma chave primária personalizada, basta definir o argumento primary_key (para True)

Page 14: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Nomes de Atributos mais Explicativos

•Os tipos, com exceção dos de relacionamento, recebem um primeiro argumento opcional, que é o nome explicativo do atributo

•Ex.:

•Nos tipos de relacionamento o primeiro argumento temos a classe de modelo, e requerem um atributo verbose_name

Page 15: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Relacionamentos

•O poder dos bancos de dados relacionais está na capacidade de registrar relacionamentos

•O ORM do Django oferece os três tipos mais comuns de relacionamentos entre entidades:§Muitos para um – many-to-one§Muitos para muitos – many-to-many§Um para um – one-to-one

Page 16: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Relacionamento Many-to-One

•Definidos com o tipo django.db.models.ForeignKey•Exemplo: um carro tem um fabricante

§Um fabricante produz muitos carros, mas§Um carro possui apenas um fabricante

Page 17: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Relacionamento Many-to-Many

•São definidos com o tipo: ManyToManyField•Exemplo:

§Uma pizza possui várias coberturas e uma cobertura pode estar presente em várias pizzas

Page 18: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Relacionamento Many-to-Many

•Geralmente, a utilização do ManyToManyField é feita nos objetos que serão editados em formulário

•Ex.: no exemplo das pizzas e coberturas o mais natural é que ao editar uma pizza, seja escolhidas as coberturas

Page 19: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Relacionamento Many-to-Many

•ManyToManyField também permitem uma série de argumentos adicionais

•Explicados em: https://docs.djangoproject.com/en/3.0/ref/models/fields/#manytomany-arguments

Page 20: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Classes de Relacionamento

•Em alguns casos, necessitados armazenar informações específicas do relacionamento –definição de uma classe de relacionamento

Page 21: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Classes de Relacionamento

•Uma vez definidas as classes participantes, definimos a classe de relacionamento

Page 22: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Classes de Relacionamento

•Utilização:

Page 23: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Relacionamento One-to-One

•Utilizam o tipo OneToOneField•Requer um argumento posicional – a classe

relacionada•Ex.:

Page 24: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Relacionamento One-to-One

•Continuação...

Page 25: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Relacionamento One-to-One

•Por fim...

Page 26: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Relacionamento One-to-One

•Utilização:

Page 27: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Definição de Metadados

• Informados através da classe interna Meta•Ex.:

Page 28: diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created Date: 12/5/2019 7:26:10 PM

Atributos de Modelos

•O principal deles é o objects§É a interface para o “gerente” das entidades§ Interface pela qual são realizadas as operações com o

banco de dados – recuperação de instâncias§Acessíveis a partir da classe e não das instâncias