Skip to content

Latest commit

 

History

History
317 lines (222 loc) · 8.13 KB

File metadata and controls

317 lines (222 loc) · 8.13 KB

PASSOS BÁSICOS DJANGO

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

VENV

Criar virtual enviroment:

python3 -m venv <nome_do_projeto>

Ativar venv no linux:

source <nome_do_projeto>/bin/activate

ou

. <nome_do_projeto>/bin/activate>

Ativar venv no windows:

venv\Scripts\activate

Instalar django:

pip install django

Iniciar projeto:

django-admin startproject <nome do projeto> .

Alterar configurações de settings.py:

LANGUAGE_CODE = 'pt-br'
TIME_ZONE = 'America/Sao_Paulo'

Testar o servidor:

python manage.py runserver

URLS:

path('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>_urls

E 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 path

Podem ser passados argumentos para as views:

path('hello/<str:nome> ', hello)

Views:

Importar a classe HttpResponse:

from django.http import HttpResponse

Http - 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) + '!')

Models:

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 models

Definindo 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 makemigrations

Toda vez que realizar alterações em um model, deve ser aplicado makemigrations.

Tipos de ações entre relacionamentos

  • 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:

Django admin serve para gerenciamento do backend.

Criando um super usuário:

python manage.py createsuperuser

Para 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>)

Templates:

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 %}

Arquivos estáticos:

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' %}">

Arquivos de media:

#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)