Django 2.0: mais um prego no caixão do Python 2.x

Paulo Scardine
Python Weekly Brazil
4 min readDec 5, 2017

Esta semana saiu o Django 2.0 que suporta apenas Python 3 (mínimo Python 3.4). O que isto significa para suas bases de código?

Esta é a última versão que vai suportar Python 3.4. Programe-se para atualizar o sistema operacional ou ao menos o Python nos servidores onde a versão oficial do Python 3 é a 3.4 — note que o próprio Python 3.4 morre em março de 2019 (end-of-life), um mês antes de acabar o suporte a versão 2.0 do Django.

A última versão a suportar Python 2.7 é a versão 1.11. Você tem até abril de 2020 para atualizar para Django 2.0 e consequentemente para Python 3, porque depois disso acaba o suporte para a série 1.11 que é uma versão LTS (long term support).

Atualizar de uma versão para a versão seguinte do Django não é difícil se você corrigir todas as “DeprecationWarnings”. A maior fonte de problemas vem de pacotes de terceiros que foram abandonados ou que mudaram drasticamente nas últimas versões do pacote (estou olhando pra você, Django REST Framework). E claro, atualizar de Python 2 para Python 3 costuma ser mais chato e por isso muita gente está deixando para a última hora.

Ainda tem aquele box com Django 1.3 rodando? A festa já acabou faz tempo, a versão mais antiga que ainda tem suporte é a versão 1.7. Esta é justamente uma versão onde aconteceram grandes mudanças com a incorporação das migrations (antes disso era preciso instalar um pacote de terceiros para usar database migrations).

The party is over for Django below version 1.7

Outras novidades

A decisão de cortar o suporte para Python 2 é de longe a mais impactante, mas sempre tem alguma mudança interessante. Selecionei algumas pra você:

URL estilo Flask

A cada versão o Django vem copiando as melhores ideias do Flask. Já faz algum tempo que podemos oficialmente usar templates Jinja2 nas aplicações Django. Esse template engine é muito parecido com os templates do Django mas permite passar argumentos para métodos e funções, tem um sistema de macros muito legal e dá um pau feio nos templates nativos em termos de performance. A novidade é que agora o Django copiou as URLs do Flask. O que você prefere?

Esquema tradicional usando expressões regulares

Ou esse novo, estilo Flask:

Novo estilo de URLs, parecido com o do Flask

Window functions

Window functions é uma novidade que torna possível acrescentar uma cláusula OVER na query. Se você nem sabe o que é uma cláusula OVER relaxa e passa para o próximo assunto. O suporte depende do backend, por enquanto MySQL, PostgreSQL e Oracle suportam a nova feature (com graus diferentes de suporte, por exemplo as opções “Asc()’ e “Desc()” podem não ser aceitas, consulte a documentação específica do backend que estiver usando.

Ai você pode me pergunta, Tio Paulo, pra que serve essa bagaça? Vou tentar explicar. Suponha que você tem um banco de dados de filmes, e quer comparar a avaliação dos filmes com a dos outros filmes do mesmo gênero e estúdio de cinema:

Isso vai resultar uma query mais ou menos como a seguinte:

SELECT title, released, ... , AVG(rating) 
OVER (PARTITION BY studio, genre)
FROM movies_movie
ORDER_BY EXTRACT(YEAR FROM released);

Se quiser saber mais sobre a cláusula OVER e Window Functions sugiro os excelentes exemplos na documentação do PostgreSQL.

Admin responsivo

Já precisou usar o admin em um celular ou tablet e achou uma droga? Segundo as notas do release 2.0 agora o admin é totalmente responsivo e suporta os principais navegadores mobile. Navegadores mais antigos devem mostrar níveis variáveis de degradação.

ModelAdmin.autocomplete_fields

Finalmente uma solução oficial para os as caixas de seleção gigantescas que deixam o admin lento quando você tem uma foreign key para uma tabela grande. Agora dá pra usar o popular widget de auto-complete “Select2” sem precisar instalar um pacote de terceiros.

Novidades menores

Para outras novidades menores veja os release notes.

Resumo da ópera?

  • planeje-se para manter a versão do Django atualizada nos seus aplicativos, não deixe escorregar mais do que 2 versões senão fica cada vez mais difícil atualizar. Sempre que fizer um upgrade, silencie (corrija) todas as DeprecationWarnings.
  • se você é dos últimos moicanos usando Python 2, é bom começar a migrar suas aplicações para Python 3, o core team do Django orienta todos os autores de extensões a parar com o suporte para Python 2.

Um grande abraço e se precisarem de ajuda para elaborar um planejamento de ciclo de vida ou para fazer um upgrade daqueles mais chatos pode entrar em contato: estamos sempre procurando trabalho nessa área.

--

--