diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/fetch.php?media=user:1301182:... · created...
TRANSCRIPT
![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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/23.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/24.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/25.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/26.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/27.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022070211/60fd8eae8cfd56001f53d0f9/html5/thumbnails/28.jpg)
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