|
|
Chaque modification effectuée sur un modèle est enregistrée dans la base dans données.
|
|
|
|
|
|
Dès qu'un modèle veut être sauvegardé, deux signaux sont envoyés dans `logs.signals` : un avant et un après la sauvegarde. En pré-sauvegarde, on récupère l'ancienne version du modèle, si elle existe. En post-sauvegarde, on récupère l'utilisateur et l'IP courants (voir ci-dessous), on convertit les modèles en JSON et on enregistre une entrée `Changelog` dans la base de données.
|
|
|
Dès qu'un modèle veut être sauvegardé, deux signaux sont envoyés dans `logs.signals` : un avant et un après la sauvegarde.
|
|
|
En pré-sauvegarde, on récupère l'ancienne version du modèle, si elle existe.
|
|
|
En post-sauvegarde, on récupère l'utilisateur et l'IP courants (voir ci-dessous), on convertit les modèles en JSON et on enregistre une entrée `Changelog` dans la base de données.
|
|
|
|
|
|
Pour récupérer l'utilisateur et son IP, le middleware `logs.middlewares.LogsMiddlewares` récupère à chaque requête l'utilisateur et l'adresse IP, et les stocke dans le processus courant, afin qu'ils puissent être récupérés par les signaux. Si jamais la modification ne provient pas d'une requête Web, on suppose qu'elle vient d'une instruction lancée avec `manage.py`. On récupère alors le nom de l'utilisateur dans l'interface de commandes, et si une note est associée à cet alias, alors on considère que c'est le détenteur de la note qui a effectué cette modification, sur l'adresse IP `127.0.0.1`. Sinon, le champ est laissé à `None`.
|
|
|
Pour récupérer l'utilisateur et son IP, le middleware `logs.middlewares.LogsMiddlewares` récupère à chaque requête l'utilisateur et l'adresse IP, et les stocke dans le processus courant, afin qu'ils puissent être récupérés par les signaux.
|
|
|
|
|
|
Si jamais la modification ne provient pas d'une requête Web, on suppose qu'elle vient d'une instruction lancée avec `manage.py`.
|
|
|
On récupère alors le nom de l'utilisateur dans l'interface de commandes, et si une note est associée à cet alias, alors on considère que c'est le détenteur de la note qui a effectué cette modification, sur l'adresse IP `127.0.0.1`.
|
|
|
Sinon, le champ est laissé à `None`.
|
|
|
|
|
|
Une entrée de `Changelog` contient les informations suivantes :
|
|
|
|
... | ... | @@ -31,4 +37,4 @@ Exemple de Changelog, pour la création d'une transaction de 42424242 centimes d |
|
|
}
|
|
|
```
|
|
|
|
|
|
S'il est préférable de passer en console Postgresql pour parcourir les logs, ils sont trouvables via l'API dans `/api/logs`, sous réserve d'avoir les droits suffisants (ie. être respo info). |
|
|
\ No newline at end of file |
|
|
S'il est préférable de passer en console Postgresql pour parcourir les logs, ils sont trouvables via l'API dans `/api/logs`, sous réserve d'avoir les droits suffisants (ie. être respo info). |