Instalação do Django
Utilize o pip para a instalação do framework:
pip install django==3.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
No PyCharm, a instalação é realizada diretamente durante a criação de um novo projeto Django.
Criação de um Projeto
Via linha de comando:
django-admin startproject meu_projeto
No PyCharm, navegue até File > New Project > Django, configure o caminho do projeto, o interpretador Python e o nome do aplicativo inicial.
Iniciando o Servidor de Desenvolvimento
Através do terminal, dentro do diretório raiz do projeto:
python manage.py runserver
python manage.py runserver 8080
python manage.py runserver 0.0.0.0:9090
No PyCharm, basta executar a configuração de execução pré-definida (o botão verde).
Configurações Essenciais em settings.py
Para permitir requisições POST durante o desenvolvimento, comente a linha do CsrfViewMiddleware na lista MIDDLEWARE.
Configuração de arquivos estáticos:
STATIC_URL = '/arquivos_estaticos/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'pasta_estatica'),
]
Configure a conexão com o banco de dados na variável DATABASES. Registre seus aplicativos na lista INSTALLED_APPS e defina o diretório de templates em TEMPLATES.
Criação e Registro de um Aplicativo (App)
Para criar um novo app:
python manage.py startapp app_vendas
Registre-o em INSTALLED_APPS utilizando seu nome ou caminho completo da classe de configuração.
Roteamento de URLs
Em urls.py, importe as views do seu aplicativo e mapeie as URLs para as funções correspondentes:
from app_vendas import views as vendas_views
urlpatterns = [
path('lista-produtos/', vendas_views.lista_produtos),
path('criar-pedido/', vendas_views.criar_pedido),
]
Funções de Visão (Views)
As views processam as requisições e retornam respostas. São importados três atalhos principais do Django:
from django.shortcuts import render, HttpResponse, redirect
def minha_view(request):
# Lógica de negócio
dados = {'chave': 'valor'}
return render(request, 'template.html', dados)
# return HttpResponse('Resposta em texto')
# return redirect('/nova-url/')
Sintaxe de Templates
Para rendeirzar dados em um template HTML, passe um contexto para a função render. No template, utilize a sintaxe de chaves duplas para variáveis e tags percentuais para loops:
{{ lista_itens }}
{% for item in lista_itens %}
<p>{{ forloop.counter }} - {{ item.nome }} (ID: {{ item.pk }})</p>
{% endfor %}
Trabalhando com Formulários HTML
Ao criar um formulário, defina os atributos action (destino dos dados), method (geralmente 'post') e novalidate (opcional). Os campos input devem possuir o atributo name para serem enviados. Inclua um botão de envio.
Diferenças entre GET e POST
GET é usado para recuperar dados. Acessado via URL direta, links ou formulários sem método. Os parâmetros ficam na URL (request.GET.get('parametro')).
POST é usado para enviar dados (criar, atualizar). Acessado via formulários com method="post". Os dados são obtidos com request.POST.get('campo').
Conexão com Banco de Dados MySQL
- Crie o banco de dados no MySQL manualmente.
- Em
settings.py, configureDATABASEScom as credenciais (ENGINE, NAME, HOST, PORT, USER, PASSWORD). - No arquivo
__init__.pydo projeto, adicione:
import pymysql
pymysql.install_as_MySQLdb()
Definição de Modelos e ORM
No arquivo models.py, defina suas classes herdando de models.Model. Cada classe corresponde a uma tabela, e os atributos aos campos.
from django.db import models
class Fabricante(models.Model):
nome = models.CharField(max_length=100)
class Produto(models.Model):
descricao = models.CharField(max_length=200)
fabricante = models.ForeignKey(Fabricante, on_delete=models.CASCADE)
Execute os comandos de migração para aplicar as alterações no banco:
python manage.py makemigrations
python manage.py migrate
Operações com ORM
Principais operações usando o gerenciador de objetos .objects:
# Criar um novo registro
novo_fab = Fabricante.objects.create(nome='TechCorp')
# Consultar todos os registros
todos_fabricantes = Fabricante.objects.all()
# Consulta filtrada
fabricante_especifico = Fabricante.objects.get(id=1)
lista_filtrada = Fabricante.objects.filter(nome__icontains='Tech')
# Atualização
Fabricante.objects.filter(id=1).update(nome='NovaTech')
obj = Fabricante.objects.get(id=1)
obj.nome = 'MegaTech'
obj.save()
# Exclusão
Fabricante.objects.filter(nome='Obsoleto').delete()
Relacionamentos e Queries Avançadas
Para relacionamentos de chave estrangeira, a navegação entre objetos é direta. A consulta de produtos com seu fabricante seria:
produtos = Produto.objects.select_related('fabricante').all()
for produto in produtos:
print(f"{produto.descricao} - Fabricante: {produto.fabricante.nome}")
A criação de um produto relacionado pode ser feita de duas formas:
# Usando o objeto do fabricante
fab_obj = Fabricante.objects.get(id=1)
Produto.objects.create(descricao='Widget', fabricante=fab_obj)
# Usando o ID da chave estrangeira diretamente
Produto.objects.create(descricao='Gadget', fabricante_id=2)