Esse template tem como objetivo trazer uma estrutura mínima de projeto em Django, com o banco de dados para configuração sendo o SQLite. Os comandos a seguir são para rodar o projeto no Windows, para outros sistemas operacionais, os procedimentos podem ser diferentes (normalmente, usar "python manage.py" para algumas versões do Windows e "python3 manage.py" para Linux). A seguir, temos a sequência de pré-requisitos para rodar um projeto Django em sua máquina:
py --version - Caso não esteja com o Python instaldo em sua máquina, vá no site e baixe a versão mais atualizada: https://www.python.org/downloads/
-
Faça o download do script https://bootstrap.pypa.io/get-pip.py
py get-pip.pydjango-admin startproject myproject
A partir daqui, caso queira deixar o projeto criado manualmente igual ao do template, basta alterar o conteúdo dos arquivos.
py manage.py startapp myapp
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
]from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
]from django.http import HttpResponse
def home(request):
return HttpResponse("Olá, Django!")from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('myapp.urls')), # Inclui as rotas da sua aplicação
]py manage.py createsuperuserpy manage.py runserverclass Genero(models.Model):
# cada classe é uma tabela no banco de dados e herda de uma classe "models.Model"
# cada variável é um campo da tabela
# caso não especificado a criação de uma primary key na classe,
# o Django cria uma primary key "id" automaticamente.
# no nosso exemplo, pra fins de compreensão, criamos um campo id_livro
# "primary_key=True" indica que esse campo será uma chave primária,
# e o AutoField indica que será feito um autoincremento para cada inserção no banco
id_genero = models.AutoField(primary_key=True)
# CharField indica que esse campo é de caracteres
# "max_length = 50" limita o tamanho máximo para 50
# "unique" é equivalente ao UNIQUE do SQL
nome = models.CharField(max_length=50, unique=True)
# essa função é para mostrar cada gênero no Django admin no formato "id - nomedolivro"
def __str__(self):
return f"{self.id_genero} - {self.nome}"
class Livro(models.Model):
id_livro = models.AutoField(primary_key=True)
# "null = False" equivale ao "NOT NULL" do SQL
autor = models.CharField(max_length=120, null=False)
titulo = models.CharField(max_length=120, null=False)
# "models.ForeignKey" sinaliza que a relação entre Livro e Gênero é 1 para muitos,
# e, nesse caso, cria um campo "genero" na tabela "Livro",
# referenciando o id do gênero da tabela "Gênero",
# considerando uma aplicação no qual cada livro tem apenas um gênero.
# "on_delete=models.CASCADE" equivale ao "ON DELETE CASCADE" do SQL
# "on_delete=models.SET_NULL" equivale ao "ON DELETE NULL" do SQL
# é importante ressaltar que temos que colocar null=True, para que o campo possa ser nulo
genero = models.ForeignKey(Genero, on_delete=models.SET_NULL, null=True)
def __str__(self):
return f"{self.id_livro} - {self.titulo}"py manage.py makemigrationsQuando usar: Sempre que você alterar ou criar novos models, adicionar campos ou modificar os existentes.
O que faz: Analisa os modelos definidos no projeto e gera um arquivo de migração correspondente às mudanças detectadas. Este arquivo de migração é um script que descreve as operações necessárias para modificar a estrutura do banco de dados (criar tabelas, adicionar colunas, etc.).
py manage.py migrateQuando usar: Após gerar os arquivos de migração com makemigrations, ou quando houver novas migrações a serem aplicadas no banco de dados.
O que faz: Executa as alterações descritas nos arquivos de migração no banco de dados real, criando ou alterando tabelas, colunas, índices, etc., para sincronizar o banco de dados com o estado atual dos models do projeto.
from django.contrib import admin
from .models import Genero, Livro
admin.site.register(Genero)
admin.site.register(Livro)py manage.py shellCom o shell, você pode realizar as operações CRUD (após cada operação, verifique no Django Admin se ela foi realizada com sucesso)
# primeiro, você deve incluir os models para poder fazer as operações
from .models import Genero, Livro
# Create
novo_genero = "Ficção Científica"
Genero.objects.create(nome=novo_genero)
print(Genero.objects.get(nome=novo_genero))
# Read
Genero.objects.get(nome=novo_genero)
# Update
# Resgatando o livro pelo nome
atualiza_genero = Genero.objects.get(nome=novo_genero2)
# Atualizando o nome
atualiza_genero.nome = "Acadêmico"
atualiza_genero.save()
# Delete
# Resgatando o livro pelo nomes
genero = Genero.objects.get(nome=novo_genero2)
# Deletando o livro
genero.delete()