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