Modelagem inicial
Construindo nosso primeiro modelo
Nos handouts a seguir, você construirá um sistema web para realizar anotações curtas chamado Get-it. Nesse sistema, o usuário será capaz de adicionar, ler, editar e remover suas anotações. Cada anotação possuirá um título e um conteúdo formado exclusivamente por texto.
Uma etapa importante no desenvolvimento de um sistema é a modelagem dos dados. Devemos refletir sobre quais dados queremos armazenar no banco de dados e como eles devem ser organizados. Em DevLife não vamos nos aprofundar nessa discussão, mas em semestres futuros você terá disciplinas nas quais aprenderá quais aspectos devem ser levados em conta nessa etapa do desenvolvimento. O que você precisa saber por enquanto é que nos bancos de dados que utilizaremos, as informações são armazenadas em tabelas. Por exemplo, os nossos dados de anotações poderiam ser armazenados em uma tabela como esta:
Note que a primeira coluna, o id
, possui um número associado, que aumenta a cada linha. Em bancos de dados é comum que as linhas de uma tabela possuam um identificador numérico. Isso facilita o acesso à informação e também pode ser utilizado para criar relações entre tabelas, mas isso é assunto para um handout futuro.
O arquivo models.py
#
Bancos de dados são sistemas bastante complexos, com diversas travas de segurança e otimizações. Por esse motivo, a grande maioria dos frameworks não cria um banco de dados próprio, mas se conecta a um banco de dados externo.
O Django possui diversas funcionalidades relacionadas a banco de dados. Para utilizá-las, devemos implementar classes que herdam do tipo django.db.models.Model
. Cada classe de modelo que implementarmos será mapeada em uma tabela do banco de dados pelo Django. Nesse primeiro momento, não precisamos nos preocupar com os detalhes de como isso acontece.
Exercício 1
Nas classes de modelo, devemos definir quais são os nomes e tipos das colunas que serão armazenadas na tabela do banco de dados. A seguir definimos uma classe Note
1 para representar uma anotação no banco de dados:
Para entender o que esse código faz, vamos consultar a boa e velha documentação. O Django é um projeto muito maior e mais utilizado do que o Pygame. Portanto, a sua documentação é muito mais completa - você pode encontrar diversos exemplos de uso e explicações detalhadas de cada funcionalidade.
Exercício 2
Resposta
O django.db.models.CharField
é uma classe que representa um campo (coluna do banco de dados) do tipo texto. Ele pode receber um argumento max_length
para indicar o número máximo de caracteres que serão armazenados nessa coluna.
Assim, a classe Note
definida acima, possui uma coluna chamada title
que armazena strings de no máximo 200 caracteres.
Exercício 3
Resposta
O tipo django.db.models.TextField
é recomendado para o armazenamento de textos grandes. Esse tipo pode ser mais adequado para o nosso caso de uso, pois assim podemos possibilitar ao usuário que escreva conteúdos mais longos.
Não existe necessariamente uma resposta certa. Essa é uma decisão que depende do design.
Exercício 4
Resposta
Como queremos armazenar a informação de horário, devemos utilizar o django.db.models.DateTimeField
.
Exercício 5
Resposta
O argumento auto_now_add
deve ser True
. É comum ficarmos em dúvida entre esse argumento e o auto_now
, que é atualizado com o horário atual sempre que o objeto é salvo (o que inclui edições aos dados).
E o ID?#
Na tabela mostrada no início da página havia 4 colunas: id
, titulo
, conteudo
e criacao
. Já vimos como criar as colunas de título e conteúdo, mas em nenhum momento criamos a coluna de id. E não vamos precisar criar. Como todo modelo do banco de dados precisa ter um id, o Django já cria essa coluna automaticamente. Assim não precisamos nos preocupar com ela durante a definição da classe.
Exercício 6
Exercício 7
Nosso primeiro modelo está pronto! Mas ainda falta um passo para podermos usá-lo no nosso sistema .
-
Em computação é comum escrevermos o código em inglês. Apesar de não ser um requisito, isso pode ser útil principalmente se existir a possibilidade de algum programador que fala outra língua encontrar o seu código. Um exemplo disso são os códigos dos seus projetos no GitHub. Manter os códigos em inglês nos seus projetos abertos no GitHub pode render até possíveis empregos no exterior. ↩