Django Anonymizable Model¶
Your project description goes here
Documentation¶
The full documentation is at https://django-anonymizable-model.readthedocs.io.
Quickstart¶
Install django-anonymizable-model:
pip install django-anonymizable-model
Add it to your INSTALLED_APPS:
INSTALLED_APPS = (
...
'anonymizable_model',
...
)
Use on your models like this:
@anonymizable(
db_label_prefix="pa_",
anonymizable_fields=["first_name", "last_name", "phone_number"]
)
class ExampleGDPRModel(models.Model):
objects = ExampleGDPRModelManager.from_queryset(ExampleGDPRModelQuerySet)()
first_name = models.CharField("First name", max_length=255)
last_name = models.CharField("Last name", max_length=255)
phone_number = models.CharField("Phone number", max_length=255, blank=True, default="")
description = models.TextField("Description", blank=True, default="")
It is possible to change db_label_prefix with your own label and assign anonymizable fields from the model for export and visualization features.
And then run migrations:
$ python manage.py makemigrations
$ python manage.py migrate
For the admin visualization use AnonymizableAdminMixin class:
@admin.register(ExampleGDPRModel)
class ExampleGDPRModelAdmin(AnonymizableAdminMixin, admin.ModelAdmin):
list_display = (
"__str__",
"first_name",
"last_name",
"phone_number",
"description",
)
fieldsets = (
(None, {"fields": (
("first_name", "last_name"),
("phone_number", "description"),
)}),
)
The admin can view all anonymized data in fields. If a staff user does not have can_view_anonymized_fields permission all the data in anonymizable_fields will be substituted with “…”.
Anonymize DATABASE¶
It is possible to anonymize data directly in database using:
$ python manage.py anonymize_database
Features¶
Remove or override __str__ method to display “…” if user does not have permission
Running Tests¶
Does the code actually work?
source <YOURVIRTUALENV>/bin/activate
(myenv) $ pip install tox
(myenv) $ tox
Development commands¶
pip install -r requirements_dev.txt
invoke -l
Credits¶
Tools used in rendering this package: