VENV
Instalar Django
Iniciar projeto
Alterar configurações de settings.py
Testar o servidor
URLS
Views
Models
Django Admin
Templates
Arquivos estáticos
Arquivos de media
Criar virtual enviroment:
python3 -m venv <nome_do_projeto>Ativar venv no linux:
source <nome_do_projeto>/bin/activateou
. <nome_do_projeto>/bin/activate>Ativar venv no windows:
venv\Scripts\activatepip install djangodjango-admin startproject <nome do projeto> .LANGUAGE_CODE = 'pt-br'TIME_ZONE = 'America/Sao_Paulo'python manage.py runserverpath('url/<argumento>/', <função ou view>)Url: é o destino a ser digitado no navegador
Argumento: no formato <tipo_variável : nome_variável>
Função ou view: sera importada do arquivo view e inserida como argumento de path
É possível extrair urls de uma app, basta incluir a classe include e seu arquivo urls.py da aplicação no arquivo urls.py do seu projeto:
from django.urls import include
from <app> import urls as <app>_urlsE criar um path que levará para as urls da aplicação:
path('exemplo/',include(<app>_urls))Para o funcionamento das urls é necessário importar:
from django.contrib import admin
from django.urls import pathPodem ser passados argumentos para as views:
path('hello/<str:nome> ', hello)Importar a classe HttpResponse:
from django.http import HttpResponseHttp - Request e Response básico da view:
def hello(Request):
return HttpResponse('Hello World!')Podem ser passados argumentos para as views:
def hello(Request, nome):
return HttpResponse('Hello ' + str(nome) + '!')Antes de criar um model, deve-se criar um app onde este model será utilizado.
python manage.py startapp <nome do app>
E registra-lo em settings.py -> INSTALLED_APPS.
Depois disso no diretório do app terá o arquivo models.py.
Neste arquivo importe a classe models:
from django.db import modelsDefinindo classe Person:
#definindo a classe(Tabela) e os fields(Atributos)
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
age = models.IntegerField()
salary = models.DecimalField(max_digits=5,decimal_places=2)
bio = models.TextField()
#função para quando listar os itens do banco na página de admin, retornar o nome e idade
def __str__(self):
return self.first_name + " " + str(self.age)Cada classe em models vai para migrate. Estas futuramente serão as tabelas do banco de dados que foi definido em settings.py -> DATABASES.
Aplicar as migrações:
#aplica os models no BD
python manage.py migrate#cria o migrate em migrations
python manage.py makemigrationsToda vez que realizar alterações em um model, deve ser aplicado makemigrations.
-
CASCADE: Quando o objeto referênciado é excluído, também são excluidos os objetos que tem referência a este objeto. Quando você exclui um post de um blog, você também quer excluir os comentários deste post. O equivalente em SQL é: CASCADE.
-
PROTECT: Proíbe a exclusão do objeto referênciado. Para excluir, você precisa remover todos os objetos que o referenciam primeiro. O equivalente em SQL é: RESTRICT.
-
SET_NULL: Seta a referência para NULL(o campo tem que possibilitar valor nulo). Quando você deleta um usuário, porém deseja manter os comentários que ele postou, porém diz que foi postado por um usuário anônimo ou excluído. Equivalente em SQLé: SET NULL.
-
SET_DEFAULT: Seta o valor default do campo. Equivalente em SQL é: SET DEFAULT.
-
DO_NOTHING: Provavelmente uma péssima idéia, devido isso poder criar problemas de integridade na sua base de dados (referenciar um objeto que não existe). Equivalente em SQL é: NO ACTION.
Django admin serve para gerenciamento do backend.
Criando um super usuário:
python manage.py createsuperuserPara exibir opções de adição, exclusão ou edição de dados dos models na página de admin, é necessário importar o model para o arquivo admin.py e registrar-lo:
from .models import <nome do model>
admin.site.register(<nome do model>)Criar o diretório na raiz do projeto.
Adicionar o nome do diretório de templates em settings.py -> TEMPLATES -> 'DIRS'
#Importar a classe render para o arquivo views.py
from django.shortcuts import render
#Função que retorna o render do template
def hello(request):
return render(request, 'index.html')Retornar variáveis como argumento de render:
v_idade recebe idade e é retornada como argumento.
return render(request, 'pessoa.html', {'v_idade':idade})No arquivo html, basta adicionar a variável entre {{}} - chaves duplas.
Por exemplo:
<html>
<body>
A idade é: {{ v_idade }}
<\body>
<\html>No arquivo .html também é possível utilizar Jinja. Exemplo:
{% if v_idade > 0 %}
A pessoa tem {{ v_idade }} anos.
{% else %}
Pessoa não encontrada
{% endif %}Adicionar o seguinte código em settings.py:
STATICFILES_DIRS = ['<nome que quiser>']Criar o diretório na raiz do projeto e adicionar os arquivos estáticos nele.
Carregue os arquivos estáticos nos templates ou qualquer html:
#Tem que ser a primeira linha do código
{% load static %}Adicione o link para o arquivo estático no head do arquivo html:
<link rel="stylesheet" href="{% static 'style.css' %}">#Adicionar o campo MEDIA_URL no arquivo settings.py, nela adicionar a variável de media.
#Começa e termina com barras.
MEDIA_URL = '/media/'
#Adicinar o campo MEDIA_ROOT, nele adicionar o nome do diretório onde ficarão os arquivos de mídia.
MEDIA_ROOT = '<o nome que quiser>'Criar o diretório na raiz do projeto.
Na classe dentro de models deve conter o field para imagem passando como arqumento o nome do diretório:
photo = models.ImageField(upload_to='fotos_produtos', null=True, blank=True)Para conseguir exibir os arquivos de mídia será necessário adicionar algumas classes em urls.py:
from django.conf import settings
from django.conf.urls.static import static
#E adicionar este trecho após as urlpatterns:
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)