Capítulo 20
Django: projeto e modelos
2 min de leitura 442 palavras 1 gravura
Neste capítulo você vai criar o projeto Django do blog do Ateliê e um modelo Post. O projeto-fio é o Ateliê Boa Viagem, ateliê digital fictício em Boa Viagem, Recife.
Antes desta etapa
Python 3. Prefira o volume PHP só se for ao módulo Symfony depois. Aqui é Python.
Seu ponto de partida
Use o exemplo 20-django-projeto do pacote anexo e copie inicio/ para uma pasta de prática fora do original. A raiz do exemplo é a referência completa desta etapa.
Use servidor só em 127.0.0.1 quando o README do exemplo pedir HTTP local. Abrir ou testar não publica nada.
Como praticar
Leia → copie ou digite → mude uma coisa → preveja → salve → recarregue → confira. Restaure cada experiência antes da próxima. Faça as atividades antes de abrir as respostas comentadas.
Projeto e app
Django organiza projeto (config) e apps (funcionalidades). O blog do Ateliê vive num app posts.
Faça na sua cópia
Confira o trecho no contexto do exemplo antes de mudar.
python -m django startproject atelie .
python manage.py startapp posts
Mude uma coisa e preveja
Confira as pastas criadas na referência do exemplo.
Anote o que espera observar antes de salvar e recarregar.
Recarregue e confira
manage.py e posts/ existem.
Se não acontecer
Use o ambiente Python do README; rode só em 127.0.0.1 depois.

Modelo Post
Um modelo descreve a tabela. Título, texto, data. Conteúdo fictício.
Faça na sua cópia
Confira o trecho no contexto do exemplo antes de mudar.
class Post(models.Model):
titulo = models.CharField(max_length=200)
texto = models.TextField()
publicado_em = models.DateTimeField(auto_now_add=True)
Mude uma coisa e preveja
Acrescente um campo autor como CharField.
Anote o que espera observar antes de salvar e recarregar.
Recarregue e confira
makemigrations detecta a mudança (quando rodar).
Se não acontecer
Registre o app em INSTALLED_APPS.
migrate local
python manage.py migrate cria o SQLite local. Não use produção neste volume.
Faça na sua cópia
Confira o trecho no contexto do exemplo antes de mudar.
python manage.py migrate
Mude uma coisa e preveja
Rode migrate na cópia de prática.
Anote o que espera observar antes de salvar e recarregar.
Recarregue e confira
db.sqlite3 aparece.
Se não acontecer
Ative o venv se o exemplo usar um.
Atividades
Atividade 1
Diferença entre projeto e app no Django?
Atividade 2
O que um modelo representa?
Atividade 3
Qual banco este volume usa?
Respostas comentadas
Resposta da atividade 1
Projeto = configuração; app = módulo de funcionalidade.
Resposta da atividade 2
Estrutura dos dados (tabela) em Python.
Resposta da atividade 3
SQLite local.
O arquivo completo
Referência do exemplo 20-django-projeto, reproduzida aqui para que você possa conferir sem sair da página.
manage.py
#!/usr/bin/env python
import os, sys
def main():
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "atelie.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
if __name__ == "__main__":
main()
posts/templates/posts/lista.html
<!DOCTYPE html>
<html lang="pt-BR"><head><meta charset="utf-8"><title>Blog do Ateliê</title></head>
<body>
<h1>Blog do Ateliê Boa Viagem</h1>
{% for post in posts %}
<article><h2>{{ post.titulo }}</h2><p>{{ post.autor }}</p><p>{{ post.texto }}</p></article>
{% empty %}<p>Nenhuma publicação ainda.</p>{% endfor %}
</body></html>