Skip to content

Latest commit

 

History

History
173 lines (163 loc) · 7.36 KB

UltimateTutorialDjango.md

File metadata and controls

173 lines (163 loc) · 7.36 KB

Ultimate Tutorial


https://www.youtube.com/playlist?list=PLjv17QYEBJPpd6nI-MXpIa4qR7prKfPQz

-1 Startando projeto e configuração para português (BR)

Em Settings:
Mudar a LANGUAGE_CODE para 'pt-br'
e TIME_ZONE para = 'America/Brasilia'

Criando as tabelas do Django:
py manage.py migrate (criar tabelas para o banco de dados)
py manage.py runserver (rodar o server) [ctrl + C pra parar de rodar o server]
py manage.py createsuperuser (criar usuário para acessar o DashBoard do Django)
Para entrar no DashBoard precisa colocar /admin no final da url

Criando módulos:
São aplicações q podemos reutilizar em outros projetos
py manage.py startapp nome


-2 Criação de um app (módulo) e configuração de views e urls

Views:
from django.views.generic import TemplateView
Aqui é onde teremos nossas funções ou classes, ex:
class IndexView(TemplateView):
template_name = 'pastaDentroDoTemplate/index.html'

Lá em settings precisamos importar a biblioteca os
import os
e adicionar em DIRS:
'DIRS': [os.path.join(BASE_DIR, 'templates')],
Basicamente só pra buscar todos os templates e colocar na pasta de templates

Templates:
onde fica nossos arquivos .html
sempre criar uma pasta template, e dentro dela, outra pasta com o mesmo nome do app

Urls.py:
Arquivo que vai guardar as urls de cada app, precisa criar
from django.urls import path (importar o path)
from .views import IndexView (importar as views)
Nesse arquivo colocar:
urlpatterns = [
path('endereço/', View.as_view(), name='nome da url'),
]
Incluir nas urls do projeto principal:
Importar include
path('endereço/', include('nome da app.urls')),

E por último precisa ativar a app no INSTALLED_APPS:
'nome.apps.NomeConfig',


-3 Configurar arquivos estáticos (CSS, JS, imagens)

Criar pasta chamada static na raiz
E dentro dela criar mais pastas para o q vc quiser colocar
css, js, img
Criar lá em settings.py um diretório para os arquivos do static
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
E para pode carregar esses arquivos nos seus aquivos .html:
{% load static %}
link rel="stylesheet" href="{% static 'caminho do arquivo/nome do arquivo' %}"
Pra por imagens, basta salvar na pasta img do static
img src="{% static 'caminho do arquivo/nome do arquivo' %}" width='200' alt=""


-4 Configurar e reutilizar templates com blocos

Criando um modelo.html onde conterá seu design modelo que estará em todas as páginas
Usando {% block name %}{% endblock %}
Assim vc n vai precisar colocar em todos os arquivos .html, só vai precisar herdar do modelo.html
Basta colocar um {% extends 'pasta/modelo.html' %}
E para mudar o conteúdo dos blocos basta mundar dentro deles


-5 Criando links para as urls (baseado no "name" da url)

Mexe no href dos templates
Basta colocar '{% url 'name' %}(o nome q agt define lá nos urlpatterns)


-6 Arquitetura App View Template (MVT)

Resumo de como o django funciona


-7 Introdução ao models.py para criação de classes e atributos

Todo Campo terá uma Atividade, e devemos dizer as propriedades de ambos, usando os Fields
Sendo q cada Atividade vai ter uma ForeignKey para indicar o Campo

E já consegue ver pelo admin as classes criadas mas tem q alterar o arquivo admin.py do app, para que apareça lá no /admin:
from .models import Campo, Atividade
admin.site.register(Campo)
admin.site.register(Atividade)
Mas ainda falta criar as tabelas no banco de dados, ai só dar um
makemigrations e migrate no terminal


-8 Criando um formulário para inserir registros (CreateView)

Nas views importar:
from django.views.generic.edit import CreateView
from.models import Campo, Atividade
from django.urls import reverse_lazy
e definir suas classes q serão criadas
class CampoCreate(CreateView):
model = Campo(nome da Model)
fields = ['nome', 'descricao'](campos a serem preenchidos no formulário)
template_name = 'cadastro/form.html'(template que será usado)
success_url = reverse_lazy('index')(url a ser redirecionado quando dar enter)

Nas urls.py:
Importar as views criadas anteriormente:
from .views import CampoCreate, AtividadeCreate
e adicionar as respectivas urls:
path('cadastrar/campo/', CampoCreate.as_view(), name='cadastrar-campo'),
path('cadastrar/atividade/', AtividadeCreate.as_view(), name='cadastrar-atividade'),
e por último colocar esse conjuntos de urls no urls.py central

Criar templates:
dentro do arquivo form.html:
form action="", method="POST"
{% csrf_token %}
{{ form.as_p }}
button type="submit" class="btn btn-primary">Cadastrar/button
/form


-9 Atualizar registros (UpdateView)

Importar UpdateView nas views
definir as classes da mesma forma q no CreateView

Nas urls.py:
importar suas novas views e definir os caminhos:
from .views import CampoUpdate, AtividadeUpdate
path('editar/campo/int:pk>', CampoUpdate.as_view(), name='editar-campo'),
path('editar/atividade/int:pk>', AtividadeUpdate.as_view(), name='editar-atividade'),
o int:pk é pra pegar o id exato da view q vc quer editar
e pronto, já consegue editar suas models


-10 Excluir registros (DeleteView) e mostrar os dados do objeto no template

Importar DeleteView nas views
e criar as novas views, mas n precisa colocar os fields
class CampoDelete(DeleteView):
model = Campo
template_name = 'cadastros/form-excluir.html'
success_url = reverse_lazy('index')

agora na urls.py, importar suas novas views e definir os caminhos
path('excluir/campo/int:pk>', CampoDelete.as_view(), name='excluir-campo'),

agora criar o arquivo form-excluir.html:
dentro do forms:
Deseja excluir o registro: {{ object }}
ele trata as models como 'object'
e graças ao on_delete:'PROTECT', só se´ra possível excluir um campo, se n tiver nenhuma atividade nele


-11 Listar registros/objetos com o ListView e laço de repetição (for) no template

Importar lá nas views:
from django.views.generic.list import ListView
e na criação das classe, só colocar o model e o template_name
class CampoList(ListView):
model = Campo
template_name = 'cadastros/listas/campo.html'

class AtividadeList(ListView):
model = Atividade
template_name = 'cadastros/listas/atividade.html'

mas aqui cada view terá seu próprio arquivo .html

Nas urls.py, mesma coisa, importar as novas views e criar os caminhos:
from .views import CampoList, AtividadeList
path('listar/campo/', CampoList.as_view(), name='listar-campo'),
path('listar/atividade/', AtividadeList.as_view(), name='listar-atividade'),

No template de campo.html criar a visualização em colunas por uma tabela por meio de um 'for'