sexta-feira, 23 de setembro de 2011

Plugins Úteis - South - Uma app para Django muito útil para gerenciamento do Banco de Dados


South

South é uma aplicação do django responsável por gerenciar as modificações feitas no projeto que influenciam em criação/edição/remoção de tabelas e/ou campos no banco de dados.

Para instalar o south no ambiente:
pip install south
adicionar ele na installed_apps

Com o South NÃO DEVE-SE USAR o syncdb do django para criação das tabelas de suas apps. Apenas deve ser rodado o syncdb para criação das tabelas referente as aplicações padrões do settings e mais a do south. 

Para criação das tabelas de uma nova aplicação utilizar:
python manage.py schemamigration NOME_DA_APP --initial

Para criação de todas as tabelas do projeto, basta omitir o nome da app.

Os comandos acima vão criar apenas os schemas de migração, nada será alterado no banco de dados. Para aplicar as migrações deve-se utilizar o comando:
python manage.py migrate NOME_DA_APP

Para todos os esquemas, basta omitir o nome da app.

Depois da situação inicial criada, caso haja necessidade de adicionar/remover campos nos models, utilizar seguinte comando para sincronizar os schemas:
python manage.py schemamigration NOME_DA_APP --auto

E para aplicar as migrações da mesma forma descrita anteriormente:
python manage.py migrate NOME_DA_APP

Caso deseje aplicar o South em algum projeto que não tenha, e as tabelas já tenham sido criadas, basta instalar o South como descrito acima, e utilizar o comando:
python manage.py convert_to_south NOME_DA_APP 


O south cria no banco de dados algumas tabelas para controle do que já foi migrado para não tentar fazer novamente, caso deseje informar o south que aquela migração já tenha sido realizada, possivelmente para corrigir algum problema, basta utilizar o comando:
python manage.py migrate --fake

Desta forma ele vai apagar as migrações contidas nos schemas gerados e colocar no banco como realizada, sem fazer nenhuma alteração no banco.

quinta-feira, 22 de setembro de 2011

Permissão somente para usuários do admin (staff_member)

As vezes, algumas views requer permissões mais rígidas, como por exemplo alguma view de integração, carga, ou até mesmo para dados sigilosos.

Para tal, basta utilizar o decorator staff_member_required, que permite apenas acesso aos membos da equipe.

Para fazer uso do mesmo basta importar em seu arquivo views.py ou admin_views.py :

from django.contrib.admin.views.decorators import staff_member_required

E na view utilizar como qualquer outro decorator:

@staff_member_required
def sua_view(request):
        #seu código aqui

sexta-feira, 16 de setembro de 2011

Correndo uma lista de valores similar a lista de impressão

Para uma entrada  1;2;3-6;7;8-10, por exemplo, assim como na impressão seria impresso as páginas 1, 2, de 3 a 6, 7 e de 8 a 10, precisei fazer um esquema para liberação de pedidos segundo essa entrada para liberar faixas distintas de pedidos.

Para tal, uso a def abaixo:

def corre_cadeia(lista_char, separador_item, identificador_lista):
 lista  = lista_char.split(separador_item)
 nova_lista = []
 for l in lista:
  if l.find(identificador_lista) == -1:
   nova_lista.append(int(l))
  else:
   inicio, termino = l.split(identificador_lista)
   inicio = int(inicio)
   termino = int(termino)
   i = inicio
   while i<= termino:
    nova_lista.append(i)
    i+=1
 return nova_lista

Ex:
>>> lista = '1;2;3-6;7;8-10'
>>> corre_cadeia ( lista, ';' , '-')
[1,2,3,4,5,6,7,8,9,10]

hasta!