Dec 18, 2025
Bruno S.
31min Ler
O Django é um framework Python de alto nível usado para atividades de desenvolvimento rápido e de design simples e pragmático. Ele simplifica muitas tarefas de desenvolvimento web, permitindo que você se concentre em desenvolver sua aplicação sem precisar reinventar a roda.
Isso faz do Django um dos frameworks mais populares e amplamente utilizados para criar sites e aplicativos dinâmicos e orientados por dados.
Neste tutorial, vamos apresentar os fundamentos básicos do Django e fornecer uma base sólida para que você possa criar sua primeira aplicação web com esse framework. Você vai conhecer todos os processos básicos, desde a configuração de uma VPS e a instalação do Python até o deployment, ou lançamento, do seu projeto Django.
Ao final deste tutorial, você será capaz de desenvolver uma aplicação web totalmente funcional e entender como continuar a desenvolver seus próprios projetos usando o Django. Se você é novo no mundo do desenvolvimento web ou está procurando expandir suas habilidades, este tutorial Django vai te ajudar a dominar o essencial.
Antes de começar a criar uma aplicação Django, é necessário configurar um ambiente de desenvolvimento. Esse processo inclui a configuração de uma VPS, a instalação do Python, a criação de um ambiente virtual e a instalação do Django.
Antes de começar a trabalhar com o Django, é importante ter um entendimento básico de determinados conceitos de programação. Listamos algumas noções que você deve dominar:
Atendendo a estas condições, você estará bem preparado para entender e executar as etapas necessárias para instalar o Django e começar a criar seus projetos online.
Escolher o ambiente de hospedagem correto é crucial para desenvolver e executar sua aplicação Django. Um Servidor Virtual Privado (VPS) oferece mais controle, recursos e capacidade de expansão do que uma hospedagem compartilhada, por isso, é ideal para projetos Django. A hospedagem VPS Django da Hostinger é uma excelente opção, com planos acessíveis, os servidores são fáceis de configurar e gerenciar.
Ao selecionar um plano VPS da Hostinger, considere as necessidades de seu projeto:
Para um projeto Django básico, um plano VPS básico, como KVM 1 ou KVM 2, costuma ser suficiente. Porém, à medida que seu projeto crescer, você poderá facilmente fazer um upgrade para opções de planos com mais recursos.

Depois de escolher uma hospedagem VPS e concluir a compra, siga as etapas a seguir para configurar seu servidor:


ssh root@ip_do_seu_vps
apt update && apt upgrade -y
Com a hospedagem VPS pronta, você já pode instalar o Python e outras dependências necessárias para o desenvolvimento Django.
Para executar o Django, você precisará instalar o Python e o sistema de pacotes pip na VPS. A maioria dos sistemas operacionais modernos do Linux, como o Ubuntu, já vem com o Python pré-instalado.
Se você não tiver instalado ou precisar atualizar o Python, o processo é bem simples. Use os comandos abaixo para verificar a versão atual e instalar a versão mais recente do Python3:
python3 --version

apt install python3-pip
apt install python3 python3-pip -y
Depois que o Python estiver instalado, você estará pronto para configurar um ambiente virtual.
Um ambiente virtual é um espaço isolado no qual você pode instalar pacotes e dependências Python para desenvolver um projeto específico. Esse método não afeta o ambiente Python de todo o sistema ou outros projetos.
Essa etapa é crucial para trabalhar com o Django, já que projetos diferentes podem exigir versões diferentes de certos pacotes. Um ambiente virtual garante que as dependências de cada projeto estejam contidas de forma organizada e não entrem em conflito umas com as outras.
Por que usar um ambiente virtual?
Siga as etapas abaixo para configurar um ambiente virtual Python em sua VPS:
apt install python3-venv -y
mkdir myprojectcd myproject
Substitua myproject pelo nome que você quiser dar à pasta do projeto.
python3 -m venv env_name
source env_name/bin/activate
Uma vez ativado, o shell prompt será alterado, passando a refletir o ambiente criado (por exemplo, (env_name)), indicando que você está trabalhando neste ambiente virtual.
Essa configuração garante que todas as dependências relacionadas ao Django sejam isoladas dentro do ambiente virtual criado, mantendo seu servidor limpo e organizado.
Com o ambiente virtual Python configurado, a próxima etapa é instalar o framework em si, etapa que pode ser feita através do gerenciador de pacotes do Python, o pip. A instalação do Django em seu ambiente virtual garante que ele possa ser gerenciado de forma independente.
Para instalar o Django, siga estes passos:
pip install django
django-admin --version

Ao verificar a versão atual do Django instalada em seu ambiente virtual, você confirma que a instalação foi bem-sucedida.
Com sua VPS preparada para hospedar um projeto Django, você pode começar a criar sua aplicação web.
Chegou a hora de criar seu primeiro projeto usando Django. Nesta seção, vamos apresentar a base de códigos necessária para começar a desenvolver o seu site ou aplicativo.
Para criar um novo projeto Django:
django-admin startproject myproject
cd myproject/myproject
vim settings.py
ALLOWED_HOSTS = ['ip_do_seu_vps']
python manage.py runserver 0.0.0.0:8000
Agora, abra seu navegador e acesse http://ip_do_seu_vps:8000/ – lembrando de substituir ip_do_seu_vps pelo IP da sua VPS. Se os passos anteriores foram feitos corretamente, você deverá ver a página de boas-vindas do Django:

Se você seguiu as etapas indicadas, você acabou de construir e executar um projeto padrão do Django em sua VPS. O restante deste tutorial Django se aprofunda no desenvolvimento de aplicações e na compreensão do Django em geral.
A execução do comando startproject cria a estrutura básica para um projeto Django e inclui vários arquivos e diretórios importantes. Abaixo indicamos detalhadamente a estrutura e a finalidade de cada componente do framework:

Cada um desses arquivos e diretórios desempenha uma função específica em seu projeto Django:
Esse é um utilitário de linha de comando que te ajuda a interagir com projetos Django. Ele é utilizado para tarefas como a execução do servidor dev, a migração de bancos de dados e o gerenciamento do aplicativo:

Suas principais funções são:

Determina a variável do ambiente para indicar ao framework Django quais arquivos de configuração devem ser utilizados.

Executa vários comandos do Django, como runserver, migrate e outros.
É o diretório interno do projeto que contém as principais definições, configurações e outros arquivos padrão do seu projeto Django.
Esse arquivo marca o diretório como um pacote Python, permitindo que o código seja importado como um módulo em Python. Por padrão, esse elemento é instalado vazio.
Esse é um dos arquivos mais importantes do Django. Ele contém todas as definições de configuração para o seu projeto, incluindo configurações de banco de dados, aplicativos instalados, middleware e configurações de arquivos estáticos.
Esse diretório define os caminhos de URL para acessar sua aplicação. Ele mapeia URLs para views que fazem solicitações e retornam respostas.

Conforme adicionar mais funcionalidades ao seu projeto, você estenderá os padrões de url (urlpatterns) para incluir os caminhos de suas próprias views.
Esse arquivo fornece um ponto de entrada para servidores web compatíveis com ASGI (Asynchronous Server Gateway Interface). Esse protocolo de comunicação entre servidores e aplicações Python é o padrão para aplicativos Django assíncronos.

Esse arquivo é o ponto de entrada de servidores da Web compatíveis com WSGI (Web Server Gateway Interface), como o Gunicorn ou o uWSGI, para atender ao seu projeto em um ambiente de produção.

Compreender a função de cada arquivo e diretório te ajuda a modificar configurações, adicionar URLs e gerenciar a estrutura do seu projeto como um todo.
Com seu projeto Django configurado e em execução, o próximo passo é mergulhar em um dos principais componentes de qualquer programa da web: o gerenciamento de dados. Nesta seção, vamos entender como o Django lida com modelos e bancos de dados para alimentar aplicações dinâmicas e orientadas por dados.
No Django, os modelos (models) definem a estrutura das tabelas do seu banco de dados. Eles representam classes Python que mapeiam diretamente as tabelas do banco de dados, permitindo que você interaja com seus dados de uma forma mais conveniente. Cada classe de cada modelo representa uma tabela, e cada atributo do modelo representa um campo da tabela.
O Django abstrai o código SQL, facilitando a criação, a atualização e o gerenciamento de bancos de dados sem que você precise escrever consultas SQL brutas.
Criando um modelo
Para criar um modelo, você definirá uma classe Python dentro do arquivo models.py de uma de suas aplicações. Cada atributo (attribute) na classe (class) corresponde a um campo do banco de dados, e o Django trabalha automaticamente com a estrutura subjacente do banco de dados.
Abaixo indicamos um exemplo de um modelo simples criado para um projeto Django:
# In your app's models.py file
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
published_date = models.DateField()
isbn = models.CharField(max_length=13, unique=True)
def __str__(self):
return self.titleO método str() garante que, quando você consulta (query) um elemento, book no nosso exemplo, ele retorna o título do livro como uma representação de string.
Adicionando o modelo ao banco de dados
Depois de criar um modelo, o Django precisa traduzir esse elemento para uma tabela de banco de dados. Esse processo é feito através de migrações (migrations), que são arquivos que o Django usa para monitorar as alterações em seus modelos.
python manage.py makemigrations
O Django vai analisar as alterações em seu arquivo models.py e gerar um arquivo de migração que descreve essas alterações em instruções estilo SQL.
Você verá outputs semelhantes a este:
Migrations for 'myapp':
myapp/migrations/0001_initial.py
- Create model Bookpython manage.py migrate
Com isso, as tabelas necessárias estarão criadas em seu banco de dados. Agora, o modelo Book será representado por uma tabela Book correspondente em seu banco de dados, e você pode começar a adicionar, consultar e gerenciar os dados.
O Django suporta vários bancos de dados, permitindo que você escolha o melhor para o seu projeto. O banco de dados padrão no Django é o SQLite, que é leve e fácil de configurar, ou seja, ideal para o desenvolvimento de pequenos projetos.
No entanto, para ambientes de produção, bancos de dados mais robustos, como PostgreSQL, MySQL ou MariaDB, são as opções recomendadas, devido à sua escalabilidade e desempenho.
O Django oferece suporte integrado para todos esses bancos de dados. Vamos começar com a configuração do banco de dados padrão (SQLite).
Configurando o banco de dados padrão SQLite
Por padrão, o Django é configurado para usar o SQLite, que vem pré-instalado com o Python. Portanto, nenhuma configuração adicional é necessária. O próximo passo é conferir se seu projeto está pronto para usar o SQLite:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}python manage.py migrate
Esse comando cria o arquivo db.sqlite3 no diretório raiz do seu projeto e configura todas as tabelas necessárias para a execução do aplicativo.
Depois de configurar o banco de dados SQLite para o desenvolvimento do projeto, e conforme a quantidade de dados crescer, pode ser necessário integrar um sistema de gerenciamento de banco de dados (DBMS) mais robusto. O Django suporta vários DBMSs, incluindo PostgreSQL, MySQL, MariaDB e Oracle, cada um com suas próprias vantagens e processos de configuração e integração.
Nesta seção, vamos apresentar uma visão geral de cada uma das opções:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}Note que o SQlite trabalha com apenas dois parâmetros: ENGINE e NAME.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
}
}Diferenças: Ao contrário do SQLite, o PostgreSQL é um banco de dados com recursos completos e que suporta vários usuários simultâneos, consultas avançadas e transações. Para utilizar esse banco, é necessário instalar o PostgreSQL no servidor, criar um banco de dados e um usuário, e fazer configurações mais complexas.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # or 'django.db.backends.mariadb' for MariaDB
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '3306',
}
}Diferenças: O MySQL e o MariaDB são conhecidos por seu desempenho com grandes conjuntos de dados e aplicações web de alto tráfego. Eles suportam vários mecanismos de armazenamento, leituras rápidas e podem lidar com milhões de queries de forma rápida.
Agora, vamos simplificar e esclarecer os detalhes para você poder escolher o melhor banco de dados para desenvolver seu projeto Django:
Configurando PostgreSQL com Django
Nesta seção, vamos apresentar o processo de integração do PostgreSQL com o Django, já que ele é um dos bancos de dados mais usados para desenvolvimento de aplicações.
sudo apt update
sudo apt install postgresql postgresql-contrib
pip install psycopg2
sudo -u postgres psql
CREATE DATABASE mydatabase;
CREATE USER mydatabaseuser WITH PASSWORD 'mypassword';
Conceda todos os privilégios do banco de dados ao usuário recém criado mydatabaseuser:
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO mydatabaseuser;
Saia do shell do PostgreSQL:
q
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost', # Use '127.0.0.1' if 'localhost' doesn't work
'PORT': '5432', # Default PostgreSQL port
}
}python manage.py migrate
Esse comando cria as tabelas necessárias em seu banco de dados PostgreSQL.
python manage.py runserver
Acesse a URL http://127.0.0.1:8000/ em seu navegador. Se a página de boas-vindas do Django for exibida, quer dizer que a conexão com o banco de dados está funcionando corretamente.
Com seu banco de dados PostgreSQL totalmente integrado, o framework Django poderá lidar com bases de dados maiores e mais complexas, permitindo a expansão do seu projeto.
Com o banco de dados e os modelos de gerenciamento configurados, o próximo passo é exibir essas informações aos usuários e criar interfaces interativas.
É nessa etapa que as Views (exibições) e os Templates (modelos) atuam, definindo a lógica e a estrutura por trás das páginas com as quais os usuários vão interagir.
No Django, as views representam um componente essencial que define a lógica por trás do que o usuário vê quando interage com a sua aplicação.
Em termos simples, uma visualização recebe e processa uma solicitação vinda de um usuário da internet e retorna uma resposta, normalmente na forma de uma página HTML renderizada. Com o uso de modelos e templates, as exibições fazem a ponte entre o banco de dados e a interface que o usuário vê.
Dois tipos principais de visualizações no Djang são as Views baseadas em funções (FBVs) e as Views baseadas em classes (CBVs). Ambas têm o mesmo propósito, mas organizam o código de programação de maneiras diferentes.
Function-Based Views (FBVs)
As visualizações FBVs são funções Python básicas que aceitam um objeto de solicitação e retornam uma resposta. Elas costumam ser usadas para casos de navegação mais simples ou quando você precisa de mais controle sobre o fluxo do processo.
Abaixo indicamos um exemplo de uma FBV que renderiza um template HTML:
from django.shortcuts import render
# Function-based view
def homepage(request):
return render(request, 'homepage.html')Neste exemplo:
As FBVs são fáceis de entender e de implementar, mas, à medida que as views se tornam mais complexas, envolvendo formulários ou autenticação, elas podem se tornar mais difíceis de manter.
Class-Based Views (CBVs)
As visualizações baseadas em classe, por outro lado, permitem que você estruture as views de forma mais eficiente através de princípios de programação orientada a objetos. Por serem baseadas em classes Python, as CBVs são mais flexíveis e reutilizáveis.
O Django fornece views genéricas incorporadas, como ListView e DetailView, que tratam de casos mais comuns. Essas views permitem que você se concentre mais em personalizá-las em vez de reescrever lógicas repetitivas.
Veja um exemplo de CBV que executa a mesma função que o FBV anterior:
from django.views.generic import TemplateView
# Class-based view
class HomePageView(TemplateView):
template_name = 'homepage.html'Neste exemplo:
Para usar esse CBV e configurar uma URL, você precisa incluir o método .as_view() ao adicioná-lo ao urls.py:
from django.urls import path
from .views import HomePageView
urlpatterns = [
path('', HomePageView.as_view(), name='home'),
]Quando usar FBVs e quando usar CBVs
Tanto as visualizações FBVs quanto CBVs são partes constituintes do Django, e a escolha entre eles depende dos requisitos do seu projeto e da sua preferência pessoal.
O sistema de templates, ou modelos, do Django foi projetado para separar a apresentação dos dados da lógica subjacente a ela. Templates são essencialmente arquivos HTML que contêm conteúdos dinâmicos, permitindo exibir os dados processados a partir das views. Para inserir dados dinâmicos numa página HTML, a Django Template Language (DTL) oferece placeholders (textos de preenchimento) e lógicas de visualização, como loops e condicionais.
Os templates desempenham um papel central na aparência das páginas web, mantendo uma separação clara entre a lógica, que é tratada pelas views, e a interface do usuário.
Criando um Template
Para usar um template no Django, você precisa criar um arquivo HTML dentro do diretório chamado templates. Abaixo apresentamos um exemplo da estrutura do diretório:
myproject/ │ ├── myapp/ │ ├── templates/ │ │ └── myapp/ │ │ └── homepage.html │ └── views.py │ └── manage.py
Na estrutura acima, o Django procura automaticamente por templates dentro do diretório templates do seu app. Você pode organizar ainda mais os templates dentro de pastas específicas da sua aplicação (como myapp/homepage.html), garantindo que cada aplicação terá seus próprios templates.
Confira um exemplo de um template simples para página inicial (homepage.html):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Home</title>
</head>
<body>
<h1>Welcome to {{ site_name }}</h1>
<p>{{ message }}</p>
</body>
</html>Neste template, {{ site_name }} e {{ message }} são placeholders que serão preenchidos com dados dinâmicos a partir da view.
Renderizando um template em uma view
Para renderizar um template para a visualização dos usuários, é preciso usar a função render() do Django. Abaixo indicamos como renderizar o template homepage.html com alguns dados de contexto em uma view baseada em função – function-based view (FBV):
from django.shortcuts import render
def homepage(request):
context = {
'site_name': 'My Django Website',
'message': 'This is the homepage content!'
}
return render(request, 'myapp/homepage.html', context)Neste exemplo:
Quando um usuário acessar a página, os placeholders {{ site_name }} e {{ message }} do template serão substituídos por “My Django Website” e “This is the homepage content!”, respectivamente.
Tags e filtros de template
Os templates do Django também suportam tags e filtros, que permitem adicionar conteúdos dinâmicos e lógicas de visualização dentro de arquivos HTML.
{% if user.is_authenticated %}
<p>Welcome back, {{ user.username }}!</p>
{% else %}
<p>Hello, Guest!</p>
{% endif %}<p>Published on {{ article.published_date|date:"F j, Y" }}</p>Estendendo templates
O Django suporta herança de templates, isso é, é possível criar templates-base que podem ser usados para criar outros templates (extend template). Esse recurso é útil para manter um layout consistente em todas as páginas, como cabeçalhos e rodapés padrão.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}My Site{% endblock %}</title>
</head>
<body>
<header>
<h1>Site Header</h1>
</header>
<main>
{% block content %}
<!-- Page-specific content goes here -->
{% endblock %}
</main>
<footer>
<p>Footer Content</p>
</footer>
</body>
</html>{% extends 'base.html' %}
{% block title %}Home Page{% endblock %}
{% block content %}
<h2>Welcome to the homepage!</h2>
<p>This is the homepage content.</p>
{% endblock %}Ao estender o template base, você pode reutilizar o cabeçalho e o rodapé em diferentes páginas, garantindo um layout consistente sem precisar fazer repetições.
Usando arquivos estáticos em templates
Os templates também permitem referenciar arquivos estáticos (como CSS, JavaScript ou imagens) usando a tag {% static %}. Por exemplo, para incluir um arquivo CSS:
<link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}">Lembre-se de configurar corretamente os diretórios de arquivos estáticos no settings.py:
STATIC_URL = '/static/'
Utilizando o sistema de templates do Django, você pode criar páginas dinâmicas e baseadas em dados, mantendo uma separação limpa entre a lógica ou estrutura e a apresentação ou visualização.
O dispatcher de URL do Django se baseia em expressões regulares ou conversores de caminho (convert-path) para combinar solicitações de URL com views específicas. Esses padrões de URL são definidos no diretório urls.py, e o Django usa essa configuração para determinar qual view deve responder à requisição.
Cada projeto Django costuma ter dois níveis de configuração de URL:
Configuração básica de URL
Veja um exemplo de como configurar padrões de URL em um projeto simples:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls), # Admin site
path('', include('myapp.urls')), # Include app-level URLs for "myapp"
]from django.urls import path
from . import views
urlpatterns = [
path('', views.homepage, name='home'), # Maps the root URL to the homepage view
path('about/', views.about, name='about'), # Maps "/about/" to the about view
]Roteamento de URL com views baseadas em funções (FBVs)
Abaixo demonstramos como as views correspondentes às configurações de URL acima podem aparecer no arquivo views.py:
from django.shortcuts import render
def homepage(request):
return render(request, 'homepage.html')
def about(request):
return render(request, 'about.html')Esta configuração conecta as URLs homepage e about às suas respectivas views, garantindo que quando um usuário visita as URLs http://example.com/ ou http://example.com/about/, a página renderiza e exibe o template correto.
Roteamento de URL com views baseadas em classes (CBVs)
Também é possível mapear URLs para visualizações class-based (CBVs), que exigem uma configuração um pouco diferente. Abaixo indicamos um exemplo de mapping de URL CBV:
from django.urls import path
from .views import HomePageView, AboutPageView
urlpatterns = [
path('', HomePageView.as_view(), name='home'),
path('about/', AboutPageView.as_view(), name='about'),
]Respectivamente, confira como se estruturam as visualizações baseadas em classe no arquivo views.py:
from django.views.generic import TemplateView
class HomePageView(TemplateView):
template_name = 'homepage.html'
class AboutPageView(TemplateView):
template_name = 'about.html'Neste caso, o método .as_view() é utilizado para conectar as views baseadas em classes aos padrões de URL determinados.
Parâmetros de URL e roteamento dinâmico
O framework Django também permite capturar parâmetros de URL e passá-los para as views, recurso especialmente útil no mapeamento de URLs dinâmicas, como em blog posts ou páginas de produtos em lojas virtuais.
Aqui está um exemplo no qual a URL se conecta a um parâmetro integer, ou inteiro:
from django.urls import path
from . import views
urlpatterns = [
path('article/<int:id>/', views.article_detail, name='article_detail'),
]Neste caso, a função <int:id> captura o integer a partir da URL e o passa para a view article_detail como um argumento:
def article_detail(request, id):
# Fetch the article using the provided ID
article = get_object_or_404(Article, pk=id)
return render(request, 'article_detail.html', {'article': article})Se um usuário visitar a URL http://example.com/article/5/, o Django passará 5 como o argumento id para a view article_detail, permitindo que o servidor localize e exiba o artigo específico.
Padrões de URL nomeados
É uma boa prática nomear seus padrões de URL. Isto permite referenciar as URLs pelos seus nomes nos modelos e views em vez de ter que codificar os padrões repetitivamente.
No exemplo urls.py acima, cada URL tem um argumento de nome:
path('about/', views.about, name='about')Em seus templates, você pode usar a tag de template {% url %} para fazer referência às URLs nomeadas:
<a href="{% url 'about' %}">Sobre Nós</a>Dessa forma, se a URL about mudar, você só precisa atualizar o endereço na configuração da URL e não em cada um dos templates.
Ao configurar e trabalhar com padrões de URL no Django, você pode rastrear diferentes URLs para suas respectivas views. Essa flexibilidade permite que você apresente tanto páginas estáticas simples quanto conteúdos mais complexos e dinâmicos que variam de acordo com o input do usuário.
Agora que você já sabe como configurar views, templates, e padrões de URL, para construir uma aplicação Django totalmente funcional, também é preciso gerenciar arquivos estáticos como CSS, JavaScript e imagens.
Felizmente, o framework Django oferece formas simples e eficientes de gerenciar arquivos estáticos, garantindo que eles sejam organizados e exibidos corretamente durante o desenvolvimento e lançamento da aplicação.
Configurando arquivos estáticos no Django
Para gerenciar arquivos estáticos no Django, você precisa configurar seu projeto para ele saber onde procurar e exibir tais arquivos.
Defina a URL estática e o Diretório em settings.py:
# settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [
BASE_DIR / "static", # Optional: Add this if you want to store static files in a 'static' folder within your project
]Por padrão, o Django também procura arquivos estáticos dentro do diretório estático (static) de cada aplicação. Por exemplo, se você tem um app chamado myapp, é possível criar uma estrutura de pastas como essa:
myapp/ │ ├── static/ │ └── myapp/ │ └── style.css └── views.py
O Django automaticamente reconhece e serve esses arquivos durante o desenvolvimento.
Usando arquivos estáticos em templates
Para usar arquivos estáticos em seus templates, o primeiro passo é carregar a tag de template {% static %} do Django. Depois, você pode referenciar seus arquivos estáticos pelos seus respectivos caminhos (paths):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Home Page</title>
{% load static %}
<link rel="stylesheet" href="{% static 'myapp/style.css' %}">
</head>
<body>
<h1>Welcome to My Django App</h1>
<img src="{% static 'myapp/images/logo.png' %}" alt="Logo">
</body>
</html>Nesse exemplo:
Coletando arquivos estáticos para deployment
Durante o desenvolvimento, o Django serve arquivos estáticos automaticamente quando DEBUG = True. No entanto, em produção, o Django não serve arquivos estáticos de forma automática. Nesse caso, é preciso coletar todos os arquivos estáticos de vários locais e armazená-los em um único diretório.
Para fazer isso, utilize o comando de gerenciamento collectstatic:
INSTALLED_APPS = [
# Other installed apps
'django.contrib.staticfiles',
]STATIC_ROOT = BASE_DIR / 'staticfiles'
STATIC_ROOT: Caminho que define o diretório onde o Django deverá coletar arquivos estáticos para deployment.
python manage.py collectstatic
Este comando coleta todos os arquivos estáticos de cada diretório estático da aplicação e de qualquer outro local especificado em STATICFILES_DIRS, armazenando-os conjuntamente no diretório STATIC_ROOT.
Servindo arquivos estáticos na produção
Em um ambiente de produção, geralmente utilizamos um servidor web (como Nginx ou Apache) para servir arquivos estáticos. O framework recomenda configurar o servidor para servir conteúdo estático eficientemente, reduzindo a carga da aplicação Django.
Confira um exemplo de como configurar a exibição de arquivos estáticos em um ambiente Nginx:
server {
listen 80;
server_name yourdomain.com;
location /static/ {
alias /path/to/your/project/staticfiles/; # The path to STATIC_ROOT
}
location / {
proxy_pass http://127.0.0.1:8000; # Pass requests to Django app
}
}Nesta configuração, o Nginx automaticamente serve arquivos estáticos a partir do diretório /static/, enquanto encaminha todas as outras solicitações para o aplicativo Django.
Gerenciando corretamente seus arquivos estáticos no Django, você garante que sua aplicação terá um bom aspecto em termos de estilo e imagens, e também um funcionamento eficiente quando lançada.
Conforme o desenvolvimento de suas aplicações se torna mais dinâmico e complexo, a necessidade de gerenciar usuários, proteger conteúdos e controlar acessos se torna fundamental.
O Django conta com um sistema de autenticação integrado que facilita o gerenciamento de login, logout, cadastro e permissões de usuários. Esses recursos permitem que o desenvolvedor do projeto Django gerencie eficientemente tanto a autenticação quanto a autorização de diferentes usuários.
O sistema de autenticação do Django simplifica a administração de usuários pelos recursos como login, logout, gerenciamento de senhas e cadastros. Por padrão, o Django oferece a funcionalidade de modelos de usuário e views de autenticação que lidam com a maioria dessas tarefas.
Configurando login e logout de usuários
Para implementar a funcionalidade de login e logout, você pode usar as views integradas do framework, encontradas em django.contrib.auth.views. Essas views lidam com o processo de autenticação e simplificam o código necessário para processar essas operações.
from django.urls import path
from django.contrib.auth import views as auth_views
urlpatterns = [
path('login/', auth_views.LoginView.as_view(), name='login'),
path('logout/', auth_views.LogoutView.as_view(), name='logout'),
]<form method="post">
{% csrf_token %}
<div>
<label for="username">Username:</label>
<input type="text" id="username" name="username" required>
</div>
<div>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required>
</div>
<button type="submit">Login</button>
</form>Este template irá lidar com a autenticação do visitante quando ele inserir um usuário e uma senha válidos.
<a href="{% url 'logout' %}">Logout</a>Criando uma View de Cadastro de Usuário
Por padrão, o Django não conta uma view de registro ou cadastro integrada, mas você pode criar uma utilizando o UserCreationForm do Django:
from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
login(request, user) # Automatically log the user in after registration
return redirect('home') # Redirect to home page after successful registration
else:
form = UserCreationForm()
return render(request, 'register.html', {'form': form})urlpatterns = [
path('register/', views.register, name='register'),
]<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Register</button>
</form>Esta view de cadastro permite que o usuário crie uma conta através de um formulário simples. Depois do registo, a sessão do usuário é automaticamente iniciada.
A autorização de um usuário permite controlar o acesso dele a certas views e ações com base nas permissões ou funções de usuário. O sistema de permissões do Django facilita o gerenciamento dos usuários e seus acessos a partes específicas da aplicação.
Restringindo o acesso com solicitação de login
Para restringir o acesso a certas views, você pode usar o decorator do Django @login_required, assim, apenas usuários autenticados com login podem acessar uma visualização:
from django.contrib.auth.decorators import login_required
@login_required
def dashboard(request):
return render(request, 'dashboard.html')Isso garante que se um usuário não estiver logado, ele será automaticamente redirecionado para a página de login.
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import TemplateView
class DashboardView(LoginRequiredMixin, TemplateView):
template_name = 'dashboard.html'Gerenciamento de permissões de usuário
O Django permite que você atribua diferentes permissões a usuários e grupos de usuários, que podem ser usadas para controlar o acesso a visualizações ou ações específicas. As permissões podem ser adicionadas aos modelos de usuário e gerenciadas nas views.
from django.contrib.auth.decorators import permission_required
@permission_required('app.add_article')
def add_article(request):
# View code for adding an articleNesse caso, somente os usuários com a permissão add_article poderão acessar a visualização indicada.
Restringir o acesso com base nas funções do usuário
O recurso de grupos do Django permite que você crie funções (como “editor” ou “visualizador”) e atribua usuários a esses grupos. A partir disso, você pode gerenciar a participação de um usuário a um grupo específico para controlar o acesso.
from django.contrib.auth.models import Group, User group = Group.objects.get(name='editors') user = User.objects.get(username='john') user.groups.add(group) # Assign the user to the 'editors' group
from django.contrib.auth.decorators import user_passes_test
def is_editor(user):
return user.groups.filter(name='editors').exists()
@user_passes_test(is_editor)
def editor_dashboard(request):
return render(request, 'editor_dashboard.html')Neste exemplo, somente os usuários que pertencem ao grupo “editores” podem acessar a visualização do painel de edição, o editor_dashboard.
Utilizando os sistemas integrados de autenticação e autorização do Django, você pode gerenciar o login, o cadastro e as permissões dos usuários com segurança, garantindo que conteúdos sensíveis estarão protegidos e que o acesso será liberado ou limitado de acordo com o caso.
Depois de implementar os serviços de autenticação e autorização de usuários, o próximo recurso a ser gerenciado em uma página web são os inputs dos usuários pelos formulários. O Django conta com um sistema potente e flexível para criar, processar e validar formulários.
O sistema de formulários do Django é baseado em classes Python que tratam formulários como objetos. Esses formulários podem ser renderizados em templates, validados e processados através de algumas poucas linhas de código. Os formulários podem ser criados manualmente com a classe Form do Django ou gerados automaticamente a partir de modelos do ModelForm.
Para criar um formulário usando o framework Django, é preciso primeiro definir uma classe de formulário no arquivo forms.py. Essa classe define os campos e as regras de preenchimento e validação do formulário.
# forms.py
from django import forms
class ContactForm(forms.Form):
name = forms.CharField(max_length=100, label='Seu Nome')
email = forms.EmailField(label='Seu Email')
message = forms.CharField(widget=forms.Textarea, label='Sua Mensagem')Esse formulário inclui três campos: nome, email e mensagem. Cada campo é representado por uma classe de campo de preenchimento, como CharField para texto curto, EmailField para endereços de email e Textarea para entradas de texto mais longas.
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Enviar Mensagem</button>
</form># views.py
from django.shortcuts import render
from .forms import ContactForm
def contact_view(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
# Process the data, e.g., send an email or save it to the database
name = form.cleaned_data['name']
email = form.cleaned_data['email']
message = form.cleaned_data['message']
# Redirect to a success page or show a success message
return render(request, 'thanks.html')
else:
form = ContactForm()
return render(request, 'contact.html', {'form': form})Nesta view:
Os formulários do Django contam com um sistema de validação integrado que garante que os dados enviados estejam corretos e seguros. A validação de campos como EmailField indica se o usuário preencheu um endereço de email válido. Você também pode criar uma lógica de validação personalizada para aplicar regras específicas aos formulários.
Validação padrão
O Django executa automaticamente algumas validações:
Validação personalizada
Você também pode definir uma lógica de validação personalizada para seus formulários, basta sobrescrever o método clean() ou criar validadores de campo personalizados.
# forms.py
from django import forms
from django.core.exceptions import ValidationError
class ContactForm(forms.Form):
name = forms.CharField(max_length=100, label='Seu Nome')
email = forms.EmailField(label='Seu Email')
message = forms.CharField(widget=forms.Textarea, label='Sua Mensagem')
def clean_name(self):
name = self.cleaned_data.get('name')
if "spam" in name.lower():
raise ValidationError("Invalid name: 'spam' is not allowed.")
return nameNesse exemplo, se o nome contiver a palavra spam, o Django irá retornar um erro de validação.
<form method="post">
{% csrf_token %}
<div>
{{ form.name.label_tag }} {{ form.name }}
{% if form.name.errors %}
<div class="error">{{ form.name.errors }}</div>
{% endif %}
</div>
<div>
{{ form.email.label_tag }} {{ form.email }}
{% if form.email.errors %}
<div class="error">{{ form.email.errors }}</div>
{% endif %}
</div>
<div>
{{ form.message.label_tag }} {{ form.message }}
{% if form.message.errors %}
<div class="error">{{ form.message.errors }}</div>
{% endif %}
</div>
<button type="submit">Send Message</button>
</form>Isso faz com que a página exiba mensagens de erro ao lado dos campos de preenchimento que os usuários precisam corrigir.
Em muitos casos, os formulários estão vinculados a modelos. Com o Django, é fácil criar formulários a partir de modelos usando o ModelForm. Essa técnica economiza seu tempo pois automaticamente gera os campos do formulário de acordo com os campos do modelo.
# models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)Você pode criar um formulário para esse modelo assim:
# forms.py
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'content']# views.py
from django.shortcuts import render
from .forms import PostForm
def create_post(request):
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
form.save() # Saves the form data to the database
return redirect('post_list') # Redirect to a list of posts
else:
form = PostForm()
return render(request, 'create_post.html', {'form': form})Ao usar o ModelForm, o Django gera campos de formulário automaticamente com base nos campos do modelo Post e salva o formulário no banco de dados.
Depois que o projeto estiver totalmente desenvolvido e testado no seu servidor local, a etapa final é fazer o lançamento da aplicação em um servidor live para que os usuários possam acessar. O deploy, ou implantação, de um projeto Django exige cuidado e atenção às práticas recomendadas para garantir a segurança, a escalabilidade e o desempenho do projeto. Nesta seção, vamos apresentar as etapas básicas de publicação do seu app em uma VPS.
Antes de começar com as etapas técnicas, é importante seguir algumas boas práticas para preparar seu projeto Django:
ALLOWED_HOSTS = ['seudominio.com', 'www.seudominio.com']
Agora que você já conhece as boas práticas para preparar o lançamento do seu projeto Django, é hora de implantá-lo em um servidor virtual privado (VPS). Nesta seção, vamos indicar as etapas de configuração do servidor e dos serviços necessários para colocar seu aplicativo Django no ar e torná-lo acessível aos usuários.
Criando um arquivo Python requirements.txt
O arquivo requirements.txt lista todas as dependências Python necessárias para rodar seu projeto Django. Esse arquivo permite que você instale todos os pacotes necessários com um único comando.
Lembre-se de ativar o ambiente virtual e acessar o diretório principal do seu projeto, onde está o arquivo manage.py.
Em seguida, crie o arquivo requirements.txt com o seguinte comando:
pip3 freeze > requirements.txt
Esse comando cria um arquivo requirements.txt no diretório atual já com todos os pacotes e versões que estão instalados em seu ambiente virtual.
Depois disso, abra o arquivo requirements.txt e verifique se todas as dependências Python necessárias para executar seu projeto estão listadas.
Fazendo o upload do projeto num repositório remoto (GitHub)
Antes de fazer o deploy do seu projeto na VPS, uma prática muito recomendada é fazer o upload do seu código em um repositório remoto, como o GitHub. Isso permite que você controle as versões da aplicação, facilite o trabalho entre colaboradores do projeto e simplifique o próprio processo de deployment.
sudo apt install git-all
git init
venv/ __pycache__/ db.sqlite3 *.pyc *.log media/
git add .
git commit -m "Initial commit"
git remote add origin https://github.com/url-do-repositorio-criado
git branch -M main
git status
git push -u origin main
Prepare sua VPS e recupere (retrieve) o código do projeto
O próximo passo é preparar seu servidor virtual para o deployment e fazer o download do código da aplicação nele:
ssh root@ip_do_seu_vps
sudo apt install nginx
sudo pip3 install gunicorn
Usaremos o Nginx como servidor web e o Gunicorn como servidor da aplicação.
git clone https://github.com/seu-repositorio/nome-do-projeto.git
cd nome-do-projeto
python3 -m venv env_namesource env_name/bin/activate
pip3 install -r requirements.txt
python manage.py migrate
python manage.py collectstatic
sudo nano /etc/systemd/system/gunicorn.service
Adicione a seguinte configuração:
[Unit] Description=gunicorn daemon After=network.target [Service] User=your-username Group=www-data WorkingDirectory=/your/project/directory ExecStart=/your/project/directory/env_name/bin/gunicorn --access-logfile - --workers 3 --bind unix:/your/project/directory.sock myproject.wsgi:application [Install] WantedBy=multi-user.target
Lembre-se de substituir os campos de your-username e /your/project/directory com os valores reais do seu nome de usuário e do caminho do diretório do seu projeto.
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo nano /etc/nginx/sites-available/myproject
Adicione a seguinte configuração:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location / {
proxy_pass http://unix:/your/project/directory/project-name.sock;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /static/ {
alias /your/project/directory/static/;
}
location /media/ {
alias /your/project/directory/media/;
}
}Lembre-se de substituir o campo /your/project/directory com o caminho real do diretório do seu projeto.
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
sudo systemctl restart nginx
sudo apt install certbot python3-certbot-nginxsudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
Seguindo esses passos, você pode lançar seu projeto Django em uma VPS sem maiores erros, garantindo a segurança da aplicação e um bom desempenho.
Com o Nginx e o Gunicorn cuidando da transferência de dados entre a web e o servidor, sua aplicação está pronta para lidar com tráfego ativo. Visite seu domínio e, se tiver configurado tudo corretamente, você verá sua aplicação ativa.
Neste tutorial Django, apresentamos as etapas essenciais para começar a usar o framework, desde a configuração do ambiente de desenvolvimento até o deployment do projeto em um servidor virtual privado (VPS). O passo-a-passo mostrou como criar um projeto, gerenciar modelos, armazenar dados, criar views e templates, trabalhar com URLs e com arquivos estáticos, implementar autenticação de usuário e publicar sua aplicação em um servidor ativo.
Com esses conhecimentos básicos, agora você estará preparado para começar a criar seus próprios projetos com o framework Django. Seja um simples blog ou um aplicativo mais complexo, o Django fornece as ferramentas necessárias para dar vida às suas ideias. Mergulhe de cabeça, experimente e veja o que é possível criar com esse poderoso framework.
Django é um framework, ou estrutura, Python e de alto nível. Foi projetado para atividades de desenvolvimento web rápido e de design simples e pragmático. Ele simplifica o processo de criação de aplicações para a internet, fornecendo componentes reutilizáveis, como autenticação de usuários, ORM e roteamento de URL, ao mesmo tempo em que promove a segurança e a prática de princípios recomendados, como DRY (Don’t Repeat Yourself).
O Django é popular por sua velocidade, segurança e capacidade de expansão. Ele simplifica o desenvolvimento web com recursos já integrados, como autenticação de usuários, ORM para gerenciamento de banco de dados e roteamento de URL. Sua filosofia de “baterias incluídas” (batteries-included) indica que os desenvolvedores que utilizam o framework Django são capazes de criar aplicativos robustos de forma eficiente.
Sim, conhecer a linguagem de programação Python é essencial para aprender a usar o Django, já que esse framework é baseado em Python. A familiaridade com a sintaxe, a programação orientada a objetos e a estrutura de dados do Python facilita o entendimento sobre a estrutura e as funcionalidades do Django, tornando o processo de aprendizado mais simples e eficiente.
Todo o conteúdo dos tutoriais deste site segue os rigorosos padrões editoriais e valores da Hostinger.