sexta-feira, 18 de junho de 2010

Ordenar/Embaralhar uma lista em python

Ordenar na maioria das linguagens de programação é bem fácil, sempre é alguma coisa relacionada com "sort". No Python não é diferente:


>>> a = [3,2,4,5,1,6,7]
>>> a.sort()
>>> print a
[1, 2, 3, 4, 5, 6, 7]

Vamos agora embaralhar a lista recém ordenada:

>>> import random
>>> random.shuffle(a)
>>> print a
[4, 2, 3, 7, 1, 6, 5]


Difícil né..
hasta!

segunda-feira, 24 de agosto de 2009

Debugar erros no console



Durante o desenvolvimento de qualquer aplicação, erros são comuns. O Django se mostra deveras eficiente para informar qual foi o erro e aonde este aconteceu. Isto quando se trata do browser.

E quanto aos erros gerados enquanto a parte visual é feita no flash? Quaisquer erros nesse caso não serão mostrados em tela, e o flash vai ficar travado esperando uma resposta que não virá.

Desenvolvimento no Flash requer muito mais cuidado, pois é bem mais complexo encontrar onde está o problema. Para amenizar um pouco a situação segue a maneira de fazer o debug no console.

Desta forma todos os erros do Django gerados durante a execução do flash serão listados no console, da mesma forma que isso já é feito no browser quando a setting DEBUG está como valor True.

Deixe o arquivo __init__.py da seguinte forma:




hasta!

Novos recursos do Admin - actions



Quando é necessário fazer uma atualização com mais um registro? Entrar um a um, editar e salvar? Existe um meio mais prático e eficiente pra fazer tais tarefas repetitivas.

Eis que surge o actions. Na versão do trunk do Django ele já vem nativo com a opção remover todos os registros selecionados, muito útil quando era preciso apagar vários ao mesmo tempo.

Essa nova funcionalidade não para por aqui. Também é possível colocar ações customizadas dentro desse fantástico recurso. Vejamos como.

Vejamos um exemplo:

Muitos os portais de conteúdo possuem a funcionalidade de colocar um determinado conteúdo, uma nóticia por exemplo, em destaque. Para isso no seu módulo de notícia, provavelmente terá o campo:

destaque = models.BooleanField(default=False)


Suponhamos que seja necessário colocar 5 noticias em destaque. Entrar uma a uma, não é uma opção, porquê como sempre digo, mais que dois é muito. Vejamos como ficaria de uma forma eficiente.

Dentro do seu admin.py, vá até a classe do admin do módulo que deseja implementar o actions, NoticiaAdmin por exemplo, e crie já as duas funções:





Note que não é necessário criar o remover selecionado, pois ele já é nativo.


A coisa toda acontece na linha 28. Perceba que não é necessário correr um for para pegar todas as notícias selecionadas. Ele simplesmente faz o update em todos os objetos de notícia que forem selecionados através do queryset.


Isto pode ser feito para atualizações em massa, duplicações, e quaisquer outros recursos que conseguir pensar para um conjunto de dados do mesmo tipo.


hasta!