Example: Django User Model#
Complete example of anonymizing Django’s built-in User model.
Setup#
1. Load the Django Auth preset:
python manage.py anon_load_yaml django_auth
2. Apply anonymization rules:
python manage.py anon_apply
3. Configure user groups:
# settings.py
POSTGRES_ANON = {
'ENABLED': True,
'MASKED_GROUPS': ['analysts', 'qa_team'],
}
What Gets Anonymized#
The django_auth preset anonymizes:
Email:
john@example.com→ Fake email (e.g.,alice.smith@example.com)First Name:
John→ Fake first name (e.g.,Alice)Last Name:
Doe→ Fake last name (e.g.,Smith)Username: Not anonymized by default (disabled to preserve login functionality)
Usage Examples#
Middleware (Automatic):
# Any user in 'analysts' group sees anonymized data automatically
def user_list(request):
users = User.objects.all() # Anonymized for analysts
return render(request, 'users.html', {'users': users})
Context Manager (Manual):
from django_postgres_anon.context_managers import anonymized_data
def export_users(request):
with anonymized_data():
users = User.objects.all()
return export_to_csv(users) # Anonymized data exported
Decorator (View-Level):
from django_postgres_anon.decorators import use_anonymized_data
@use_anonymized_data
def analytics_api(request):
return JsonResponse({
'users': list(User.objects.values('username', 'email', 'date_joined'))
})
Custom Rules#
Add custom anonymization beyond the preset:
from django_postgres_anon.models import MaskingRule
# Anonymize additional User field
MaskingRule.objects.create(
table_name='auth_user',
column_name='date_joined',
function_expr='anon.random_date_between(\'2020-01-01\'::date, \'2024-01-01\'::date)',
enabled=True
)
# Or anonymize related profile
MaskingRule.objects.create(
table_name='user_profile',
column_name='phone_number',
function_expr='anon.fake_phone()',
enabled=True
)
Verification#
Test that anonymization works:
from django_postgres_anon.context_managers import anonymized_data
from django.contrib.auth.models import User
# Real data
user = User.objects.first()
print(user.email) # john@example.com
# Anonymized data
with anonymized_data():
user = User.objects.first()
print(user.email) # user_12345@anonymizer.com
See Also#
Usage Patterns - More usage patterns
Getting Started - Getting started guide
Settings Reference - Configuration options