Django 5.0 Uma grande atualização para o framework web popular

By Roberto Lima
Picture of the author
Published on
Django databases

O Django 5.0, a versão mais recente do popular framework web, foi oficialmente lançado em 4 de dezembro de 2023.

Esta atualização significativa traz uma série de novos recursos, melhorias e otimizações, tornando-o um salto substancial em relação ao seu predecessor, o Django 4.2.

O lançamento foi feito sob medida para aumentar a eficiência e capacidade do desenvolvimento web, oferecendo aos desenvolvedores mais ferramentas e funcionalidades para construir aplicações web robustas.

Os principais destaques do Django 5.0 incluem:

Compatibilidade aprimorada com Python: Agora suporta as versões 3.10, 3.11 e 3.12 do Python.

Introdução de novos recursos: Filtros de Faceta no Admin, Templates Simplificados para Renderização de Campo de Formulário e Valores Padrão Calculados por Banco de Dados.

Implementação de Campos de Modelo Gerados por Banco de Dados: Adicionando mais flexibilidade e eficiência às interações com o banco de dados.

Opções expandidas para declarar opções de campo: Permitindo configurações de campo de formulário e modelo mais versáteis e dinâmicas.

Numerosas adições e melhorias de recursos menores em vários módulos do Django: Incluindo django.contrib.admin, django.contrib.auth e mais.

Mudanças e depreciações incompatíveis com versões anteriores: Com o objetivo de otimizar o framework e preparar o terreno para desenvolvimentos futuros.

Este lançamento marca um marco significativo na evolução do Django, oferecendo funcionalidade aprimorada e maior facilidade de uso para desenvolvedores em todo o mundo.

Compatibilidade com Python

O Django 5.0 apresenta compatibilidade com versões mais recentes do Python, ampliando significativamente seu alcance e capacidades.

Esta versão do Django suporta Python 3.10, 3.11 e 3.12.

Essa expansão na compatibilidade garante que o Django permaneça em sincronia com os últimos avanços do Python, oferecendo aos desenvolvedores os benefícios dos recursos e melhorias mais recentes do ecossistema Python.

Embora o Django 5.0 suporte essas três versões do Python, a equipe do Django recomenda fortemente o uso da versão mais recente de cada série.

Esta recomendação é feita para garantir o melhor desempenho, segurança e acesso aos recursos mais recentes.

Usar a versão mais recente do Python garante que os desenvolvedores possam aproveitar todo o potencial do Django 5.0, beneficiando-se da compatibilidade otimizada e dos aprimoramentos que acompanham as versões mais recentes do Python.


Novos Recursos no Django 5.0

Filtros de Faceta no Admin

O Django 5.0 introduz contagens de facetas para filtros aplicados na lista de alterações do admin.

Este recurso, que pode ser ativado/desativado por meio da UI, aprimora a interface do admin exibindo contagens de facetas ao lado dos filtros, fornecendo uma visão geral rápida da distribuição de dados.

O comportamento dos filtros de faceta pode ser configurado usando o atributo ModelAdmin.show_facets.

Templates Simplificados para Renderização de Campo de Formulário

Esta versão simplifica a renderização de campos de formulário do Django com a introdução de templates de grupo de campo.

Esses templates facilitam a renderização simplificada de componentes de campo de formulário, como rótulos, widgets, texto de ajuda e erros, aprimorando a eficiência e clareza da apresentação do formulário.

Antes:

<form>
    ...
    <div>
        {{ form.name.label_tag }}
        {% if form.name.help_text %}
            <div class="helptext" id="{{ form.name.auto_id }}_helptext">
            {{ form.name.help_text|safe }}
            </div>
        {% endif %}
        {{ form.name.errors }}
        {{ form.name }}
        <div class="row">
            <div class="col">
                {{ form.email.label_tag }}
                {% if form.email.help_text %}
                    <div class="helptext" id="{{ form.email.auto_id }}_helptext">
                    {{ form.email.help_text|safe }}
                    </div>
                {% endif %}
                {{ form.email.errors }}
                {{ form.email }}
            </div>
            <div class="col">
                {{ form.password.label_tag }}
                {% if form.password.help_text %}
                    <div class="helptext" id="{{ form.password.auto_id }}_helptext">
                    {{ form.password.help_text|safe }}
                    </div>
                {% endif %}
                {{ form.password.errors }}
                {{ form.password }}
            </div>
        </div>
    </div>
    ...
</form>

Agora:

<form>
    ...
    <div>
        {{ form.name.as_field_group }}
        <div class="row">
            <div class="col">{{ form.email.as_field_group }}</div>
            <div class="col">{{ form.password.as_field_group }}</div>
        </div>
    </div>
    ...
</form>
Valores Padrão Calculados por Banco de Dados

Django 5.0 permite definir valores padrão calculados pelo banco de dados usando o parâmetro Field.db_default. Por exemplo:

  from django.db import models
  from django.db.models.functions import Now, Pi

  class MyModel(models.Model):
      age = models.IntegerField(db_default=18)
      created = models.DateTimeField(db_default=Now())
      circumference = models.FloatField(db_default=2 * Pi())

Este recurso oferece mais flexibilidade no tratamento de valores padrão diretamente no nível do banco de dados.

Campo de Modelo Gerado por Banco de Dados

O novo GeneratedField no Django 5.0 permite a criação de colunas geradas pelo banco de dados.

Este campo é suportado por todos os backends de banco de dados e é útil para campos que são calculados a partir de outros campos.

Por exemplo:

  from django.db import models
  from django.db.models import F

  class Square(models.Model):
      side = models.IntegerField()
      area = models.GeneratedField(
          expression=F("side") * F("side"),
          output_field=models.BigIntegerField(),
          db_persist=True,
      )

Este recurso é particularmente benéfico para otimizar o desempenho do banco de dados e garantir a integridade dos dados.

Mais Opções para Declarar Opções de Campo

As opções de campo no Django 5.0 oferecem maior flexibilidade.

Os atributos (Field.choices) e (ChoiceField.choices) agora suportam mapeamentos ou funções, além de iteráveis.

Por exemplo:

  from django.db import models

  Medal = models.TextChoices("Medal", "GOLD SILVER BRONZE")

  SPORT_CHOICES = {
      "Martial Arts": {"judo": "Judo", "karate": "Karate"},
      "Racket": {"badminton": "Badminton", "tennis": "Tennis"},
      "unknown": "Unknown",
  }

  def get_scores():
      return [(i, str(i)) for i in range(10)]

  class Winner(models.Model):
      name = models.CharField(...)
      medal = models.CharField(..., choices=Medal)
      sport = models.CharField(..., choices=SPORT_CHOICES)
      score = models.IntegerField(choices=get_scores)

Esta atualização simplifica a maneira como as opções são declaradas e tratadas dentro de modelos e formulários.

Recursos Menores em Vários Módulos

Django 5.0 também inclui uma série de recursos menores em diferentes módulos:

django.contrib.admin:

Novos métodos para personalizar querysets de entradas de log e recuperar classes admin. Versão de jQuery atualizada. Propriedades de exibição de lista aprimoradas.

django.contrib.auth:

Aumento do número de iterações padrão para o hasher de senhas PBKDF2. Novas funções assíncronas.

django.contrib.contenttypes:

Suporte aprimorado para prefetching de GenericForeignKey.

django.contrib.gis:

Novas funções e métodos para manipulação de dados GIS. Suporte atualizado para versões GDAL e GEOS.

django.contrib.messages:

Novos métodos de teste para mensagens.

django.contrib.postgres:

Adicionado um novo atributo para personalizar códigos de erro de validação.

Documentação Django 5.0

Fique atento

Quer saber mais sobre JavaScript e Python?
Receba os melhores artigos sobre desenvolvimento em sua caixa de entrada!