Django (30 Part Series)
1 Guia Detalhado dos Principais Comandos do Django com Exemplos
2 Guia Introdutório para o Django: Construindo Aplicações Web em Python
… 26 more parts…
3 Criando Templates no Django: Um Guia Completo com Exemplos
4 Dominando Templates Avançados no Django: Situações e Possibilidades
5 Tipos de Funções nos Templates do Django
6 Utilizando `{% for %}` e `{% if %}` no Django: Guia Completo com Exemplos
7 Guia de Organização de Projeto Django
8 Guia para Configurar Pastas de Mídia, CSS e Outras Possibilidades no Django
9 Guia Completo do Módulo de URLs no Django
10 Guia Completo do Módulo WSGI no Django
11 Guia Completo do Módulo settings no Django
12 Guia Completo do Módulo ASGI no Django
13 Guia Completo do Módulo Admin no Django
14 Guia Completo do Módulo apps no Django
15 Guia Completo do Módulo forms no Django
16 Guia Completo do Módulo models no Django
17 Guia Completo do Módulo tests no Django
18 Guia Completo do Módulo views no Django
19 Guia Completo para Configuração e Estrutura da Pasta static no Django
20 Guia Completo para Configuração e Estrutura da Pasta media no Django
21 Criação de Telas de Login em Django: Um Guia Completo
22 Guia Completo para Restringir o Acesso a um Site em Django Apenas após o Login
23 Guia Completo para Criar Áreas Restritas e Criação de Grupos de Permissões em Django
24 Utilizando Class-Based Views (CBVs) no Django: Simplificando o Desenvolvimento Web
25 Explorando o ListView no Django: Uma Jornada pelos Recursos e Melhores Práticas
26 Conectando o Django ao Banco de Dados Microsoft SQL Server (MSSQL)
27 Explorando o CreateView no Django: Uma Abordagem Completa
28 Explorando o DetailView no Django: Uma Visão Detalhada dos Detalhes
29 Explorando o UpdateView no Django: Uma Abordagem Detalhada para Atualizações
30 Explorando o DeleteView no Django: Uma Análise Detalhada da Exclusão de Registros
O desenvolvimento de aplicativos da web é uma tarefa complexa que envolve muitos aspectos, desde o design da interface do usuário até a lógica de negócios nos bastidores. No mundo do desenvolvimento web com o framework Django, o uso de Class-Based Views (CBVs) é uma técnica poderosa e flexível para simplificar a implementação das diferentes partes de um aplicativo.
Neste artigo, exploraremos o conceito de Class-Based Views no Django e discutiremos como elas podem ser usadas para criar aplicativos web de forma mais eficiente e organizada.
O que são Class-Based Views (CBVs)?
Em Django, as Class-Based Views são uma alternativa às Function-Based Views (FBVs), que são definidas como funções Python. As CBVs são baseadas em classes e oferecem uma maneira mais orientada a objetos de lidar com as requisições da web e as respostas HTTP.
As CBVs são uma parte fundamental do sistema de “convenção sobre configuração” do Django. Isso significa que o framework oferece um conjunto de classes base prontas para uso, permitindo que os desenvolvedores herdem e personalizem essas classes para atender às necessidades específicas de seus aplicativos.
Existem várias classes base de CBV no Django, cada uma com um propósito específico. Algumas das classes CBV comuns incluem:
-
View
: A classe base genérica que fornece funcionalidade mínima para processar uma solicitação e retornar uma resposta. -
TemplateView
: Usada para exibir um modelo em resposta a uma solicitação. -
ListView
eDetailView
: Usadas para exibir uma lista de objetos ou um único objeto, geralmente de um modelo de banco de dados. -
CreateView
,UpdateView
eDeleteView
: Usadas para criar, atualizar ou excluir objetos em um banco de dados.
Benefícios das Class-Based Views
O uso de Class-Based Views no Django oferece vários benefícios:
Reutilização de código
Com CBVs, é fácil reutilizar o código. Você pode criar classes de visualização base que contêm a lógica comum e, em seguida, herdar dessas classes base para criar visualizações específicas. Isso promove a modularidade e a manutenção do código.
Estrutura organizada
As CBVs incentivam uma estrutura organizada do código, tornando mais claro onde encontrar a lógica de visualização para uma URL específica. Isso é especialmente útil em aplicativos maiores, onde a estrutura bem definida é crucial.
Extensibilidade
Você pode estender as CBVs facilmente. Por exemplo, ao herdar de uma DetailView
, você pode adicionar métodos personalizados para manipular comportamentos específicos.
Menos repetição de código
As CBVs evitam a repetição de código comum em funções baseadas em visualização. O Django fornece classes de visualização genéricas que lidam com muitos dos casos comuns, como renderização de modelos, manipulação de formulários e redirecionamentos.
Exemplo Prático
Vamos ver um exemplo prático de como usar as CBVs no Django. Suponha que você deseja criar uma página de detalhes para exibir informações sobre um objeto do modelo Produto
.
<span># models.py </span><span>from</span> <span>django.db</span> <span>import</span> <span>models</span><span>class</span> <span>Produto</span><span>(</span><span>models</span><span>.</span><span>Model</span><span>):</span><span>nome</span> <span>=</span> <span>models</span><span>.</span><span>CharField</span><span>(</span><span>max_length</span><span>=</span><span>100</span><span>)</span><span>descricao</span> <span>=</span> <span>models</span><span>.</span><span>TextField</span><span>()</span><span># views.py </span><span>from</span> <span>django.views.generic</span> <span>import</span> <span>DetailView</span><span>from</span> <span>.models</span> <span>import</span> <span>Produto</span><span>class</span> <span>ProdutoDetailView</span><span>(</span><span>DetailView</span><span>):</span><span>model</span> <span>=</span> <span>Produto</span><span>template_name</span> <span>=</span> <span>'produto_detalhes.html'</span><span>context_object_name</span> <span>=</span> <span>'produto'</span><span># models.py </span><span>from</span> <span>django.db</span> <span>import</span> <span>models</span> <span>class</span> <span>Produto</span><span>(</span><span>models</span><span>.</span><span>Model</span><span>):</span> <span>nome</span> <span>=</span> <span>models</span><span>.</span><span>CharField</span><span>(</span><span>max_length</span><span>=</span><span>100</span><span>)</span> <span>descricao</span> <span>=</span> <span>models</span><span>.</span><span>TextField</span><span>()</span> <span># views.py </span><span>from</span> <span>django.views.generic</span> <span>import</span> <span>DetailView</span> <span>from</span> <span>.models</span> <span>import</span> <span>Produto</span> <span>class</span> <span>ProdutoDetailView</span><span>(</span><span>DetailView</span><span>):</span> <span>model</span> <span>=</span> <span>Produto</span> <span>template_name</span> <span>=</span> <span>'produto_detalhes.html'</span> <span>context_object_name</span> <span>=</span> <span>'produto'</span># models.py from django.db import models class Produto(models.Model): nome = models.CharField(max_length=100) descricao = models.TextField() # views.py from django.views.generic import DetailView from .models import Produto class ProdutoDetailView(DetailView): model = Produto template_name = 'produto_detalhes.html' context_object_name = 'produto'
Enter fullscreen mode Exit fullscreen mode
Neste exemplo, criamos uma classe ProdutoDetailView
que herda da classe DetailView
do Django. Definimos o modelo como Produto
e o nome do modelo de contexto como ‘produto’. O Django cuida do resto, incluindo a recuperação do objeto Produto
correto do banco de dados e a renderização do modelo produto_detalhes.html
.
1. View
Genérica
A classe View
é uma CBV genérica que fornece funcionalidade mínima para processar uma solicitação e retornar uma resposta. É útil quando você precisa personalizar completamente o comportamento da visualização.
<span>from</span> <span>django.views.generic</span> <span>import</span> <span>View</span><span>from</span> <span>django.http</span> <span>import</span> <span>HttpResponse</span><span>class</span> <span>MinhaView</span><span>(</span><span>View</span><span>):</span><span>def</span> <span>get</span><span>(</span><span>self</span><span>,</span> <span>request</span><span>):</span><span>return</span> <span>HttpResponse</span><span>(</span><span>"Esta é uma View genérica."</span><span>)</span><span>from</span> <span>django.views.generic</span> <span>import</span> <span>View</span> <span>from</span> <span>django.http</span> <span>import</span> <span>HttpResponse</span> <span>class</span> <span>MinhaView</span><span>(</span><span>View</span><span>):</span> <span>def</span> <span>get</span><span>(</span><span>self</span><span>,</span> <span>request</span><span>):</span> <span>return</span> <span>HttpResponse</span><span>(</span><span>"Esta é uma View genérica."</span><span>)</span>from django.views.generic import View from django.http import HttpResponse class MinhaView(View): def get(self, request): return HttpResponse("Esta é uma View genérica.")
Enter fullscreen mode Exit fullscreen mode
2. TemplateView
A classe TemplateView
é usada para exibir um modelo em resposta a uma solicitação.
<span>from</span> <span>django.views.generic</span> <span>import</span> <span>TemplateView</span><span>class</span> <span>PaginaInicialView</span><span>(</span><span>TemplateView</span><span>):</span><span>template_name</span> <span>=</span> <span>'pagina_inicial.html'</span><span>from</span> <span>django.views.generic</span> <span>import</span> <span>TemplateView</span> <span>class</span> <span>PaginaInicialView</span><span>(</span><span>TemplateView</span><span>):</span> <span>template_name</span> <span>=</span> <span>'pagina_inicial.html'</span>from django.views.generic import TemplateView class PaginaInicialView(TemplateView): template_name = 'pagina_inicial.html'
Enter fullscreen mode Exit fullscreen mode
3. ListView
e DetailView
As classes ListView
e DetailView
são usadas para exibir listas de objetos ou um único objeto de um modelo de banco de dados.
<span>from</span> <span>django.views.generic</span> <span>import</span> <span>ListView</span><span>,</span> <span>DetailView</span><span>from</span> <span>.models</span> <span>import</span> <span>Produto</span><span>class</span> <span>ListaProdutosView</span><span>(</span><span>ListView</span><span>):</span><span>model</span> <span>=</span> <span>Produto</span><span>template_name</span> <span>=</span> <span>'lista_produtos.html'</span><span>context_object_name</span> <span>=</span> <span>'produtos'</span><span>class</span> <span>DetalhesProdutoView</span><span>(</span><span>DetailView</span><span>):</span><span>model</span> <span>=</span> <span>Produto</span><span>template_name</span> <span>=</span> <span>'detalhes_produto.html'</span><span>context_object_name</span> <span>=</span> <span>'produto'</span><span>from</span> <span>django.views.generic</span> <span>import</span> <span>ListView</span><span>,</span> <span>DetailView</span> <span>from</span> <span>.models</span> <span>import</span> <span>Produto</span> <span>class</span> <span>ListaProdutosView</span><span>(</span><span>ListView</span><span>):</span> <span>model</span> <span>=</span> <span>Produto</span> <span>template_name</span> <span>=</span> <span>'lista_produtos.html'</span> <span>context_object_name</span> <span>=</span> <span>'produtos'</span> <span>class</span> <span>DetalhesProdutoView</span><span>(</span><span>DetailView</span><span>):</span> <span>model</span> <span>=</span> <span>Produto</span> <span>template_name</span> <span>=</span> <span>'detalhes_produto.html'</span> <span>context_object_name</span> <span>=</span> <span>'produto'</span>from django.views.generic import ListView, DetailView from .models import Produto class ListaProdutosView(ListView): model = Produto template_name = 'lista_produtos.html' context_object_name = 'produtos' class DetalhesProdutoView(DetailView): model = Produto template_name = 'detalhes_produto.html' context_object_name = 'produto'
Enter fullscreen mode Exit fullscreen mode
4. CreateView
, UpdateView
e DeleteView
Essas classes são usadas para criar, atualizar ou excluir objetos em um banco de dados. Vou mostrar um exemplo de CreateView
.
<span>from</span> <span>django.views.generic.edit</span> <span>import</span> <span>CreateView</span><span>from</span> <span>.models</span> <span>import</span> <span>Comentario</span><span>class</span> <span>CriarComentarioView</span><span>(</span><span>CreateView</span><span>):</span><span>model</span> <span>=</span> <span>Comentario</span><span>fields</span> <span>=</span> <span>[</span><span>'autor'</span><span>,</span> <span>'texto'</span><span>]</span><span>template_name</span> <span>=</span> <span>'criar_comentario.html'</span><span>success_url</span> <span>=</span> <span>'/comentarios/'</span><span>from</span> <span>django.views.generic.edit</span> <span>import</span> <span>CreateView</span> <span>from</span> <span>.models</span> <span>import</span> <span>Comentario</span> <span>class</span> <span>CriarComentarioView</span><span>(</span><span>CreateView</span><span>):</span> <span>model</span> <span>=</span> <span>Comentario</span> <span>fields</span> <span>=</span> <span>[</span><span>'autor'</span><span>,</span> <span>'texto'</span><span>]</span> <span>template_name</span> <span>=</span> <span>'criar_comentario.html'</span> <span>success_url</span> <span>=</span> <span>'/comentarios/'</span>from django.views.generic.edit import CreateView from .models import Comentario class CriarComentarioView(CreateView): model = Comentario fields = ['autor', 'texto'] template_name = 'criar_comentario.html' success_url = '/comentarios/'
Enter fullscreen mode Exit fullscreen mode
Neste exemplo, a classe CriarComentarioView
é usada para criar um novo objeto Comentario
.
5. Visualizações Personalizadas
Você também pode criar visualizações personalizadas estendendo as CBVs fornecidas pelo Django. Aqui está um exemplo de uma visualização personalizada baseada em View
que realiza uma ação específica:
<span>from</span> <span>django.views.generic</span> <span>import</span> <span>View</span><span>from</span> <span>django.http</span> <span>import</span> <span>HttpResponse</span><span>from</span> <span>.models</span> <span>import</span> <span>Pedido</span><span>class</span> <span>ConfirmarPedidoView</span><span>(</span><span>View</span><span>):</span><span>def</span> <span>post</span><span>(</span><span>self</span><span>,</span> <span>request</span><span>,</span> <span>*</span><span>args</span><span>,</span> <span>**</span><span>kwargs</span><span>):</span><span>pedido_id</span> <span>=</span> <span>request</span><span>.</span><span>POST</span><span>.</span><span>get</span><span>(</span><span>'pedido_id'</span><span>)</span><span>try</span><span>:</span><span>pedido</span> <span>=</span> <span>Pedido</span><span>.</span><span>objects</span><span>.</span><span>get</span><span>(</span><span>pk</span><span>=</span><span>pedido_id</span><span>)</span><span>pedido</span><span>.</span><span>confirmado</span> <span>=</span> <span>True</span><span>pedido</span><span>.</span><span>save</span><span>()</span><span>return</span> <span>HttpResponse</span><span>(</span><span>"Pedido confirmado com sucesso!"</span><span>)</span><span>except</span> <span>Pedido</span><span>.</span><span>DoesNotExist</span><span>:</span><span>return</span> <span>HttpResponse</span><span>(</span><span>"Pedido não encontrado."</span><span>,</span> <span>status</span><span>=</span><span>404</span><span>)</span><span>from</span> <span>django.views.generic</span> <span>import</span> <span>View</span> <span>from</span> <span>django.http</span> <span>import</span> <span>HttpResponse</span> <span>from</span> <span>.models</span> <span>import</span> <span>Pedido</span> <span>class</span> <span>ConfirmarPedidoView</span><span>(</span><span>View</span><span>):</span> <span>def</span> <span>post</span><span>(</span><span>self</span><span>,</span> <span>request</span><span>,</span> <span>*</span><span>args</span><span>,</span> <span>**</span><span>kwargs</span><span>):</span> <span>pedido_id</span> <span>=</span> <span>request</span><span>.</span><span>POST</span><span>.</span><span>get</span><span>(</span><span>'pedido_id'</span><span>)</span> <span>try</span><span>:</span> <span>pedido</span> <span>=</span> <span>Pedido</span><span>.</span><span>objects</span><span>.</span><span>get</span><span>(</span><span>pk</span><span>=</span><span>pedido_id</span><span>)</span> <span>pedido</span><span>.</span><span>confirmado</span> <span>=</span> <span>True</span> <span>pedido</span><span>.</span><span>save</span><span>()</span> <span>return</span> <span>HttpResponse</span><span>(</span><span>"Pedido confirmado com sucesso!"</span><span>)</span> <span>except</span> <span>Pedido</span><span>.</span><span>DoesNotExist</span><span>:</span> <span>return</span> <span>HttpResponse</span><span>(</span><span>"Pedido não encontrado."</span><span>,</span> <span>status</span><span>=</span><span>404</span><span>)</span>from django.views.generic import View from django.http import HttpResponse from .models import Pedido class ConfirmarPedidoView(View): def post(self, request, *args, **kwargs): pedido_id = request.POST.get('pedido_id') try: pedido = Pedido.objects.get(pk=pedido_id) pedido.confirmado = True pedido.save() return HttpResponse("Pedido confirmado com sucesso!") except Pedido.DoesNotExist: return HttpResponse("Pedido não encontrado.", status=404)
Enter fullscreen mode Exit fullscreen mode
Neste exemplo, a visualização personalizada ConfirmarPedidoView
é usada para confirmar um pedido com base no ID do pedido enviado por um formulário POST.
Estes são apenas alguns exemplos de como as Class-Based Views (CBVs) podem ser usadas no Django para simplificar o desenvolvimento de aplicativos web. As CBVs oferecem flexibilidade e reutilização de código, tornando o desenvolvimento mais eficiente e organizado.
Documentação: https://docs.djangoproject.com/pt-br/4.2/ref/class-based-views/
Conclusão
O uso de Class-Based Views no Django é uma abordagem eficaz para simplificar o desenvolvimento de aplicativos web. Isso proporciona uma estrutura organizada, promove a reutilização de código e simplifica a manutenção do código. À medida que você se torna mais familiarizado com as CBVs, pode personalizá-las de acordo com as necessidades específicas do seu projeto. Portanto, ao iniciar um novo projeto com o Django ou ao trabalhar em um projeto existente, considere o uso das CBVs para melhorar a eficiência e a organização do seu código.
Django (30 Part Series)
1 Guia Detalhado dos Principais Comandos do Django com Exemplos
2 Guia Introdutório para o Django: Construindo Aplicações Web em Python
… 26 more parts…
3 Criando Templates no Django: Um Guia Completo com Exemplos
4 Dominando Templates Avançados no Django: Situações e Possibilidades
5 Tipos de Funções nos Templates do Django
6 Utilizando `{% for %}` e `{% if %}` no Django: Guia Completo com Exemplos
7 Guia de Organização de Projeto Django
8 Guia para Configurar Pastas de Mídia, CSS e Outras Possibilidades no Django
9 Guia Completo do Módulo de URLs no Django
10 Guia Completo do Módulo WSGI no Django
11 Guia Completo do Módulo settings no Django
12 Guia Completo do Módulo ASGI no Django
13 Guia Completo do Módulo Admin no Django
14 Guia Completo do Módulo apps no Django
15 Guia Completo do Módulo forms no Django
16 Guia Completo do Módulo models no Django
17 Guia Completo do Módulo tests no Django
18 Guia Completo do Módulo views no Django
19 Guia Completo para Configuração e Estrutura da Pasta static no Django
20 Guia Completo para Configuração e Estrutura da Pasta media no Django
21 Criação de Telas de Login em Django: Um Guia Completo
22 Guia Completo para Restringir o Acesso a um Site em Django Apenas após o Login
23 Guia Completo para Criar Áreas Restritas e Criação de Grupos de Permissões em Django
24 Utilizando Class-Based Views (CBVs) no Django: Simplificando o Desenvolvimento Web
25 Explorando o ListView no Django: Uma Jornada pelos Recursos e Melhores Práticas
26 Conectando o Django ao Banco de Dados Microsoft SQL Server (MSSQL)
27 Explorando o CreateView no Django: Uma Abordagem Completa
28 Explorando o DetailView no Django: Uma Visão Detalhada dos Detalhes
29 Explorando o UpdateView no Django: Uma Abordagem Detalhada para Atualizações
30 Explorando o DeleteView no Django: Uma Análise Detalhada da Exclusão de Registros
原文链接:Utilizando Class-Based Views (CBVs) no Django: Simplificando o Desenvolvimento Web
暂无评论内容