diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created...

Post on 27-Feb-2021

3 views 0 download

Transcript of diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · Created...

Models em Detalhes

parte 1

Prof. Fellipe Aleixo (fellipe.aleixo@ifrn.edu.br)

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)

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

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

Primeiro Exemplo

•Definição da classe:

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

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

Campos

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

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

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

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

Opções em Campos Específicos

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

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)

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

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

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

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

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

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

Classes de Relacionamento

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

Classes de Relacionamento

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

Classes de Relacionamento

•Utilização:

Relacionamento One-to-One

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

relacionada•Ex.:

Relacionamento One-to-One

•Continuação...

Relacionamento One-to-One

•Por fim...

Relacionamento One-to-One

•Utilização:

Definição de Metadados

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

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