Precisa de um registro de logs para todas as alterações realizadas em um sistema? Isso normalmente é necessário para sistemas que sofrerão auditoria.
O caminho das pedras é duro, alterar todas as views, fazer os registros manualmente, coonsiderar se quer apenas registrar qual atributo foi alterado ou pior, registrar qual era a informação antiga e qual é a informação nova de cada atributo. Trabalhoso? Muito.
Eis que surge o django-auditlog (https://github.com/jjkester/django-auditlog). Com ele o log fica bem completo e é muito fácil de configurar.
Você vai precisar de:
- Python 2.7 ou 3.4
 - Django 1.7 ou 1.8
 
Vamos a um passo a passo bem simples para colocar o plugin pra funcionar:
1. Instale ele no seu virtualenv:
pip install django-auditlog
2. Adicione ele na setting INSTALLED_APPS:
... 'auditlog' ...
3. Rode o comando migrate para criar as tabelas necessárias no banco:
manage.py migrate
4. Adicione a linha abaixo na setting MIDDLEWARE_CLASSES:
... 'auditlog.middleware.AuditlogMiddleware' ...
5. Pronto, agora é só registrar os modelos que quer manter o histórico de mudanças como no examplo abaixo:
from auditlog.registry import auditlog
from django.db import models
class MyModel(models.Model):
    pass
    # Model definition goes here
auditlog.register(MyModel)
Depois de tudo configurado, terá sido criado uma tabela no seu banco de dados com o nome de auditlog_logentry, com os seguintes campos:
- id
 - object_pk
 - object_id
 - object_repr
 - action
 - changes
 - timestamp
 - actor_id
 - content_type_id
 - remote_addr
 - additional_data
 
- object_pk e object_id armezenam a chave primária e o id do registro em questão. Caso sua classe não possua uma chave primária definida, estes dois atributos terão o mesmo valor: a chave primária ID criada automaticamente pelo Django na ausencia de uma definida.
 - object_repr será o valor definido no método __unicode__ da classe do objeto em questão.
 - action será um valor númerico (0,1 ou 2), onde o mais valor é considerado a atividade mais intrusiva no banco, logo em ordem temos: Inserção (0), Alteração (1) e Remoção (2)
 - changes armazena as mudanças feitas na forma de um dicionário, onde cada chave será o atributo alterado e terá uma lista com dois valores associado, o antigo e o novo. Ex:
 - {"ultima_troca_senha": ["2015-01-13", "2015-08-13"], "senha": ["1234567", "123456"]}
 - timestamp registrará o momento da mudança no formato datetime, yyyy-mm-dd h:i:s
 - actor_id armazena o id do usuário logado que fez a alteração. Caso haja em algum momento alteração do model registrado e o usuário não estiver logado, este atributo será nulo. Este campo faz referência ao model User utilizado pelo django, na tabela auth_user.
 - content_type_id armazena o id do content_type, fazendo referência ao model ContentType utilizado pelo django, na tabela django_content_type.
 - remote_addr registra o ip do usuário que fez a mudança
 - additional_data armazenará informações adicionais, sendo nulo no registro automático exemplificado acima.
 
Para mais infrmações, consulte a documentação: http://django-auditlog.readthedocs.org/en/latest/
hasta!

Nenhum comentário:
Postar um comentário