Introdução ao Django
Sobre
O Django é um framework em python para a criação de aplicações web, ele contém um conjunto de componentes que auxiliam no desenvolvimento rápido e design limpo e pragmático.
A arquitetura do Django possui como padrão de projeto o MTV (Model, Template, View), que servem para:
- Model: Modelo do banco de dados para o projeto.
- Template: Páginas para visualização de dados. Normalmente, é aqui que fica o HTML que será renderizado nos navegadores.
- View: Lógica de negócio. É aqui que determinamos o que irá acontecer em nosso projeto.
É semelhante a arquitetura MVC, o Templeta do Django é equivalente a View, já a view do django seria equivalente ao Controller.
Arquivos padrões
manage.py
É um utilitário de linha de comando que permite interagir com o projeto e app django de várias maneiras.
Projeto
O projeto é uma coleção de configurações e apps para um site.
Dentro da pasta do projeto do django temos os seguintes arquivos:
__init__.py
Arquivo vazio que indica ao python que este diretório deve ser considerado como um pacote.
settings.py
Arquivo de configuração do projeto django, aqui você adiciona os apps, banco de dados, etc.
urls.py
Arquivo onde declara as urls e rotas dos apps que estão relacionados ao respectivo projeto django. Por padrão tem a rota para o admin.py
declarada
asgi.py
Ponto de integração entre servidores web compatíveis com ASGI e a aplicação python.
wsgi.py
Ponto de integração entre servidores web compatíveis com WSGI e a aplicação python.
Aplicação
O app é uma aplicação que realiza uma determinada função.
Observação: Um projeto pode conter muitos apps e um app pode estar em múltiplos projetos
Dentro da pasta de app do django temos os seguintes arquivos:
__init__.py
Arquivo vazio que indica ao python que este diretório deve ser considerado um pacote python.
admin.py
É o arquivo para registrar a área administrativa do site, nele tem um crud do modelo do banco de dados da aplicação que está em model.py
. Para ser acessado tem que criar uma conta admin com o comando python3 manage.py createsuperuser
apps.py
Arquivo responsável pela configuração do app do projeto django.
migrations/
As migrations estão relacionadas aos banco de dados, é a maneira do django de propagar as alterações feitas em seus modelos no models.py
(adicionando um campo, excluindo um modelo, etc.) em seu esquema de banco de dados.
models.py
Arquivo responsável por definir os modelos da aplicação. Normalmente cada modelo representa uma tabela a ser criada no banco de dados.
- Todo modelo é uma classe Python, subclasse de
django.db.models.Model
. - Cada atributo do modelo representa uma coluna do banco de dados.
- Django fornece um api que cria automaticamente as querys SQL.
Exemplo de como fica no django:
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
Nesse caso ficaria representado como o seguinte comando SQL:
CREATE TABLE myapp_person (
"id" serial NOT NULL PRIMARY KEY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);
tests.py
Arquivo responsável por definir as regras de testes da aplicação de maneira automatizada, isto é, você cria um conjunto de testes uma vez, e então conforme faz mudanças em sua aplicação, você pode checar se o seu código continua funcionando como você originalmente pretendia, sem ter que gastar tempo executando o teste manualmente.
Confira mais sobre testes na documentação.
views.py
Arquivo responsável por renderizar a página dinâmicamente. Utiliza-se uma lógica para representar os valores em um template. que é comumente um código html para representar os dados.
É basicamente o arquivo responsável por definir as regras de negócio do app.
Exemplo de uma view que retorna a data e hora corrente em html:
from django.http import HttpResponse
import datetime
def current_datetime(request):
now = datetime.datetime.now()
html = "<html><body>It is now %s.</body></html>" % now
return HttpResponse(html)
Comando essenciais
Ver todos comandos do django:
django-admin help
Criar um projeto:
django-admin startproject <nome_do_projeto> .
django-admin startproject projetodjango .
Isso criará um diretório, que é apresentada desta forma:
- init.py
- settings.py
- urls.py
- wsgi.py
Criar uma aplicação (app):
python3 manage.py startapp <nome_app>
python3 manage.py startapp appdjango
Isso criará um diretório, que é apresentada desta forma:
- init.py
- admin.py
- migrations/init.py
- models.py
- tests.py
- views.py
Para criar as tabelas do banco de dados através do django devemos utilizar os 2 comandos abaixo:
Criar uma lista de coisas que queremos migrar para o banco:
O comando makemigrations cria novas migrações com base nas alterações detectadas nos modelos.
python3 manage.py makemigrations
Inserir os arquivos do migrations no banco de dados:
O comando migrate sincroniza o estado do banco de dados com o conjunto atual de modelos e migrações.
python3 manage.py migrate
Carregar arquivos estáticos:
python3 manage.py collectstatic
Criar usuário admin:
python3 manage.py createsuperuser
Iniciar o servidor de desenvolvimento:
Por padrão é o endereço localhost (127.0.0.1) na porta 8000, para selecionar outra porta basta digila-la como argumento após o runserver.
python3 manage.py runserver
Preparando o ambiente
Instalar o python3
sudo apt-get install python3
Instalar o pip, o gerenciador de pacotes do python
apt-get install python3-pip
Instalar o ambiente virtual (venv)
sudo apt-get install python3-venv
Através deste módulo de python, contendo seus próprios diretórios, arquivos binários, versões e módulos independentes do sistema operacional.
Utilizando o módulo venv
, podemos separar as dependências de cada projeto.
Desta forma, cada projeto possui suas próprias dependências, não precisando utilizar os módulos no escopo global.
Criar o ambiente virtual venv:
python3 -m venv <nome do ambiente virtual>
python3 -m venv env
Ativar o ambiente virtual no linux:
source /<nome do ambiente virtual>/bin/activate
source /env/bin/activate
Ativar o ambiente virtual no windows:
<nome do ambiente virtual>\Scripts\activate.bat
env\Scripts\activate.bat
Instalar o framework Django:
pip3 install django
Verifique a versão instalada no sistema com o comando python3 -m django --version
O ideal é ter a versão mais atualizada, caso já tenha a versão 2 do django, instale a versão 3 com o seguinte comando:
pip3 install --upgrade django==3.1.5
Hello world no Django
Primeiro passo é criar o projeto com o comando:
django-admin startproject projeto .
Agora temos que criar o app com o comando:
python3 manage.py startapp app
No arquivo settings.py
do diretório do projeto devemos adicionar o app criado em INSTALED_APPS alterar a linguagem, o horário da aplicação e também o local dos arquivos html para a pasta templates, que está dentro da pasta do app.
INSTALLED_APPS = [
'app',
]
LANGUAGE_CODE = 'pt-br'
TIME_ZONE = 'America/Sao_Paulo'
TEMPLATES = [
{
'DIRS': [os.path.join(BASE_DIR, 'app/templates')],
},
]
O próximo passo é criar o arquivo urls.py
na pasta do app.
A ideia aqui é importar todas as views relacionadas a url com o comando path()
, tendo como primeiro parâmetro o ' '
, que simboliza a rota para a raiz do site /. já o segundo deve ser views.index
, que é o responsavel para atender as requisições, o terceiro é name='index'
sendo o nome do aplicativo para ser declarado no html para acessar uma url.
views.index
: faz referência a função index do arquivo views, que renderiza a página.
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index')
]
Agora temos que modificar o arquivo views.py
da pasta do app, é ele quem faz a manipulação de qual urls queremos devolver e exibir na tela.
Começamos com def
para aplicar index()
que recebe uma requisição como parâmetro.
Dentro de index()
, inserimos request
. Em seguida, devolvemos com return
a renderização do html com render, que no primeiro parâmetro recebe a requisição e no segundo o arquivo html.
Essa função basicamente recebe uma requisição http e retorna a resposta http.
from django.shortcuts import render
def index(request):
return render(request,'index.html')
Agora temos que incluir o caminho index do app no urls.py
do projeto.
Nesse caso quando acessar a raiz do site o django vai acessar acessar o arquivo urls.py
do app.
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('', include('app.urls')),
path('admin/', admin.site.urls),
]
Próximo passo é renderizar um arquivo html, para isso no diretório do app criaremos a pasta templates
com o arquivo index.html
.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>hello world</title>
</head>
<body>
<h1>hello world</h1>
</body>
</html>
Devemos executar o projeto com o seguinte comando:
python3 manage.py runserver
Para visualizar o hello world é só acessar a URL http://127.0.0.1:8000/, que é a porta padrão que o django executa no localhost.