Olá pessoal! Neste artigo, quero compartilhar com vocês o projeto Cars, meu primeiro projeto usando Django. Desenvolvido no início do meu aprendizado, ele é baseado no projeto do curso Django Master. Fiz diversas modificações, principalmente nos aspectos visuais e lógicos, como a inclusão da integração com a API Gemini.
O Cars é uma aplicação de marketplace para carros, semelhante a plataformas como OLX e Webmotors, com todas as funcionalidades básicas necessárias:
- CRUD de Marcas
- CRUD de Carros
- CRUD de Usuários
- Inventário de Carros
- Autenticação de Usuário
- Integração com OpenAI
- Integração com GeminiAPI (para gerar descrições de venda dos carros)
Inicialmente, o projeto foi publicado na AWS EC2 com um banco de dados PostgreSQL. Porém, para reduzir custos de hospedagem, migrei para a OVHCloud, onde também hospedo este blog.
- Repositório do projeto: GitHub - Cars
- Link do projeto: Cars Marketplace
Aprendizados no Desenvolvimento
O desenvolvimento deste projeto proporcionou uma imersão em conceitos essenciais do Django. Vou compartilhar os mais importantes a seguir.
Arquitetura MTV (Model-Template-View)
A arquitetura MTV é o coração do Django:
- Client Request: O cliente (geralmente um navegador) faz uma requisição a uma URL especificada no arquivo
urls.py
. - View: Essa URL se conecta a uma view definida no
views.py
. - Model: A view interage com o modelo (
models.py
) para buscar dados no banco de dados usando o ORM. - Template: Os dados são processados na view e renderizados em templates HTML com a Django Template Language.
- Response: O servidor envia a página HTML gerada de volta ao cliente.
A combinação de SSR (Server Side Rendering) com a arquitetura MTV torna o Django robusto e eficiente para desenvolvimento fullstack.
Django Template Language (DTL)
A Django Template Language permite usar código Python dentro de arquivos HTML. Com ela, é possível:
- Utilizar estruturas de repetição (
for
,while
). - Fazer condicionais (
if
,elif
,else
). - Renderizar variáveis de contexto enviadas pela view.
Como o processamento ocorre no servidor, o navegador recebe apenas o HTML final, aumentando a segurança e a eficiência do sistema. Comparativamente, ela é similar ao Jinja2 usado no Flask.
Class-Based Views (CBVs)
As Class-Based Views (CBVs) tornam o Django altamente produtivo, especialmente para startups e projetos de pequeno e médio porte. Ao invés de escrever views como funções, é possível criar classes que herdam métodos e atributos predefinidos, simplificando o código e melhorando sua organização.
Exemplo de CBVs para um CRUD:
- CreateView: Cria um novo objeto no banco de dados.
- ListView: Lista objetos existentes.
- DetailView: Mostra os detalhes de um objeto.
- UpdateView: Atualiza um objeto existente.
- DeleteView: Remove um objeto do banco.
A extensão das CBVs com Mixins adiciona ainda mais flexibilidade. Por exemplo, é possível combinar um ListView
com um FormMixin
para listar objetos e criar novos na mesma view.
Django ORM
O Django ORM (Object-Relational Mapping) conecta os modelos Python ao banco de dados, permitindo:
- Criar modelos com classes Python.
- Gerar tabelas automaticamente no banco de dados.
- Executar consultas com querysets.
Exemplo de modelo:
from django.db import models
class Car(models.Model):
brand = models.ForeignKey('Brand', on_delete=models.CASCADE)
model = models.CharField(max_length=100)
year = models.IntegerField()
price = models.DecimalField(max_digits=10, decimal_places=2)
def __str__(self):
return f"{self.brand.name} {self.model} ({self.year})"
Consulta com queryset:
cars = Car.objects.filter(price__lt=50000).order_by('year')
Django Forms
Os Django Forms são essenciais para lidar com entradas de usuários. Existem duas abordagens principais:
- Forms Baseados em Classe: Mais flexíveis e recomendados para formulários complexos.
- ModelForms: Criados diretamente a partir de modelos, ideais para formularários baseados em dados de banco.
Django Shell
O Django Shell é uma ferramenta poderosa para testar interações com o banco de dados e depurar funcionalidades durante o desenvolvimento.
Exemplo de uso:
python manage.py shell
Dentro do shell, é possível manipular modelos, criar objetos e testar consultas.
Django Signals
Os Django Signals permitem executar código automaticamente em resposta a eventos no banco de dados. Exemplos comuns incluem:
- Criar perfis de usuários automaticamente após o registro.
- Atualizar estoques após uma venda.
Exemplo de signal:
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Car
@receiver(post_save, sender=Car)
def notify_new_car(sender, instance, created, **kwargs):
if created:
print(f"Novo carro adicionado: {instance}")
Django Admin
O Django Admin é uma das funcionalidades mais poderosas da plataforma. Ele fornece uma interface gráfica pronta para gerenciar dados do sistema sem necessidade de codificação adicional.
Recursos:
- Customização de campos exibidos.
- Filtros e buscas dinâmicas.
- Integração com autenticação.
Exemplo de customização no admin:
from django.contrib import admin
from .models import Car
@admin.register(Car)
class CarAdmin(admin.ModelAdmin):
list_display = ('brand', 'model', 'year', 'price')
search_fields = ('model', 'brand__name')
list_filter = ('year',)
Conclusão
O projeto Cars foi uma experiência enriquecedora que me permitiu aprofundar em conceitos fundamentais do Django. Com ele, aprendi sobre a arquitetura MTV, CBVs, ORM, signals e muito mais.
Se você está iniciando com Django, recomendo fortemente explorar essas funcionalidades, pois elas tornam o desenvolvimento mais organizado e produtivo. Caso tenham dúvidas ou sugestões, deixem nos comentários!
Comentários:
Incrivel, o Django é simplesmente sensacional!!!