Django 1.7 – Uma das melhores releases do Django?

Para quem ainda não sabe a nova versão do Django (a versão 1.7) em data de lançamento prevista para 16 de Maio deste ano.

“E dai?” vocês devem estar perguntando… Bem, “e dai” que essa nova versão tem diversas novas funcionalidades que por mim é uma das melhores (se não a melhor) releases do Django até agora. Eis os porquês:



Schema Migration

Por mim essa é a principal novidade.
Finalmente o Core do Django decidiu investir, com uma abordagem muito interessante (um projeto no kickstarter), e agora o Django terá uma App de Schema Migration embutida e pronta para ser usada =D.

Basicamente o Andrew Godwin fez essa app baseada no Django South com algumas melhorias.

Para quem não entendeu ainda qual as vantagens, basta exemplificar com um dos principais problemas (que qualquer um que já tenha feito algum projeto em Django já deve ter tido), que é poder “atualizar” as tabelas do banco de dados…

Isso por que, o agora depreciado, “syncdb” apenas criava tabelas novas caso elas não existissem, mas não atualizava caso os campos desta fossem alterados.

Mais informações sobre essa feature.

App Loading Refactor

Houve uma grande refatoração na parte do carregamento das apps, coisas que facilitam muito a vida do desenvolvedor, como:

  • Apps podem rodar código durante o startup, antes que o Django execute qualquer coisa;
  • Chega de ficar explicitando app_label no seus models caso eles fiquem fora do padrão “models.py”, agora seus models são achados automaticamente sem ter que setar nada;
  • É possível ter uma app sem ter um “models.py” caso essa não possua models

Mais informações sobre essa feature.

Formulários

Form.add_error

Com essa nova funcionalidade é possível incluir um erro para algum campo específico de dentro do método “Form.clean()“.
Basicamente você passa como primeiro parâmetro uma string que tem o nome do campo (string vazia é considerado como um erro genérico do formulário) e como segundo parâmetro um ValidationError com a mensagem que preferir.

Mais informações sobre essa feature.

Form.errors.as_json

Bem, já era hora né?
Para quem já brincou com ajax sabe que é um porre toda vez ter que serializar os erros para Json.
Agora não precisa mais se preocupar com isso, basta chamar esse método que ele retorna pra você tudo bonito.

Mais informações sobre essa feature.

Custom Manager para Reverse Relations

Agora é possível explicitar um Custom Manager para uma relação reversa:
Por exemplo:

from django.db import models
 
class Entry(models.Model):
    #...
    objects = models.Manager() # Default Manager
    entries = EntryManager() # Custom Manager
 
>>> b = Blog.objects.get(id=1)
>>> b.entry_set(manager='entries').all()

Isso é muito bacana pra quem conhece as vantagens de usar Managers customizados mas não conseguia usar para esse caso específico.

Mais informações sobre essa feature.

Tchau Memoize

Para quem usava o Memoize (django.utils.functional.memoize), fiquem atentos pois ele vai ser depreciado nessa versão (em troca do lru_cache).
Na versão 1.9 Memoize vai embora, então é bom fazer a troca o quanto antes.

Bem, essas são as razões deu achar essa release fantástica.
E você o que acha? Prefere alguma outra release? Qual? E por que?

Abraços.

About arruda

Adoro programar, descobrir novas frameworks ágeis e suas diversas aplicações.