Saiu o Django 2.1

Veja as principais novidades desta versão.

Paulo Scardine
Python Weekly Brazil
3 min readAug 1, 2018

--

Compatibilidade com Python e Ciclo de Vida

O Django 2.1 suporta apenas Python 3.5, 3.6, e 3.7. O Django 2.0 é a última versão a suportar Python 3.4 então se quiser fazer upgrade é hora de atualizar aquelas máquinas CentOS antigas... :-)

A versão 2.0 atingiu o limite de suporte oficial: no mesmo dia foi lançada a versão 2.0.8 e esta vai ser o último release de bugfix para a versão 2.0 (ainda recebe atualizações de segurança até abril de 2019). Fique de olho no calendário:

Mudanças no Admin

Model “view” Permission

A novidade mais interessante é a nova permissão “view” para os modelos no admin: até agora era necessário alguma gambiarra tediosa pra fazer um modelo “read-only” no admin do Django.

No Django 2.1 uma nova permissão “view” será criada na próxima migration. Apesar da mudança ser compatível com instalações anteriores dando automaticamente a permissão de “view” pra quem tinha “change” é necessário prestar atenção em alguns casos:

  • Se você tinha alguma permissão personalizada chamada can_view_<modelo> vai dar conflito de nome com a nova permissão automática (vai funcionar, mas pode dar a nova permissão de view inadvertidamente).
  • Se você tem um form personalizado no seu ModelAdmin, é necessário fazer override de get_form para retornar o formulário padrão se o usuário tiver apenas a permissão “view”:

Outras Novidades Menores no Admin:

  • ModelAdmin.search_fields agora aceita lookups como nome_startswith ou sobrenome_exact
  • O jQuery do admin foi atualizado da versão 2.2.3 para 3.3.1
  • Os novos métodos ModelAdmin.delete_queryset() e ModelAdmin.get_deleted_objects() permitem personalizar o processo de deleção da ação “Remover objetos selecionados” do Admin.
  • Agora dá pra fazer override de vários templates do admin tanto globalmente quanto no nível do modelo: actions.html, change_list_results.html, date_hierarchy.html, pagination.html, prepopulated_fields_js.html, search_form.html, submit_line.html, change_list_object_tools.html e change_form_object_tools.html
  • Veja a lista completa de mudanças do admin no changelist oficial do release 2.1.

Via de regra ficou mais fácil escrever aplicações para automatizar fluxos de negócio usando o admin do Django.

O Que Ficou Obsoleto

  • Se você ainda está usando MySQL 5.5, precisa fazer upgrade, a versão mínima do MySQL agora é a 5.6
  • Se você usa o PostgreSQL 9.3, também tem que fazer upgrade, somente 9.4 em diante é suportado
  • As views baseadas em funções contrib.auth.views.login(), logout(), password_change(), password_change_done(), password_reset(), password_reset_done(), password_reset_confirm(), e password_reset_complete() foram removidas em favor das views baseadas em classes.
  • O parâmetro extra_context da view contrib.auth.views.logout_then_login() foi removido.
  • django.test.runner.setup_databases() foi removido.
  • django.utils.translation.string_concat() foi removido.
  • Não é mais possível silenciar Exceptions renderizando a tag {% include %} num template.
  • DatabaseIntrospection.get_indexes() foi removido.
  • O método authenticate() dos backends de autenticação precisa receber um request como primeiro argumento posicional.
  • O django.db.models.permalink() foi removido.
  • O parâmetro USE_ETAGS foi removido. Os middlewares CommonMiddleware e django.utils.cache.patch_response_headers() deixaram de criar um cabeçalho ETag.
  • O atributo Model._meta.has_auto_field foi removido.
  • O suporte para flags dentro dos grupos de captura em grupos de captura de uma url() ((?i), (?L), (?m), (?s), and (?u)) foi removido.
  • O suporte para o método Widget.render() sem o argumento renderer foi removido.

Para beber direto na fonte, veja o anúncio e release notes originais. Tem também uma thread sobre o lançamento no Hacker News.

Um grande abraço e até a próxima!

--

--