diff --git a/user_app/apps.py b/user_app/apps.py index f2d1d41..41a7627 100644 --- a/user_app/apps.py +++ b/user_app/apps.py @@ -1,6 +1,8 @@ from django.apps import AppConfig - class UserAppConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'user_app' + + def ready(self): + import user_app.signals \ No newline at end of file diff --git a/user_app/caching.py b/user_app/caching.py index 1cefd41..d60cbc7 100644 --- a/user_app/caching.py +++ b/user_app/caching.py @@ -19,6 +19,7 @@ def get_cached_user(user_id): if user: user_data = serializers.serialize('json', [user]) cache.set(cache_key, user_data, timeout=3600) + return json.loads(user_data)[0]['fields'] else: return None diff --git a/user_app/models.py b/user_app/models.py index 0686d48..526e250 100644 --- a/user_app/models.py +++ b/user_app/models.py @@ -1,9 +1,6 @@ +import uuid from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin, Group, Permission from django.db import models -from django.db.models.signals import post_save, post_delete -from django.dispatch import receiver -from django.core.cache import cache -import uuid def generate_uuid_without_dashes(): return uuid.uuid4().hex @@ -53,12 +50,4 @@ class User(AbstractBaseUser, PermissionsMixin): REQUIRED_FIELDS = ['first_name'] def __str__(self): - return self.email - -# Cache invalidation -@receiver(post_save, sender=User) -@receiver(post_delete, sender=User) -def clear_user_cache(sender, instance, **kwargs): - """Invalidate cache for the affected user""" - cache_key = f"user_{instance.id}" - cache.delete(cache_key) \ No newline at end of file + return self.email \ No newline at end of file diff --git a/user_app/signals.py b/user_app/signals.py new file mode 100644 index 0000000..e30492a --- /dev/null +++ b/user_app/signals.py @@ -0,0 +1,11 @@ +from django.core.cache import cache +from django.db.models.signals import post_save, post_delete +from django.dispatch import receiver +from .models import User + +@receiver(post_save, sender=User) +@receiver(post_delete, sender=User) +def clear_user_cache(sender, instance, **kwargs): + """Invalidate cache for the affected user""" + cache_key = f"user_{instance.id}" + cache.delete(cache_key) \ No newline at end of file diff --git a/user_app/tests.py b/user_app/tests.py index 7ce503c..da443c3 100644 --- a/user_app/tests.py +++ b/user_app/tests.py @@ -1,3 +1,16 @@ from django.test import TestCase +from .models import User +from .caching import get_cached_user -# Create your tests here. +class UserCacheTest(TestCase): + def test_cache_invalidierung_nach_speichern(self): + user = User.objects.create(first_name="Test", last_name="User", email="test@example.com") + + cached_user = get_cached_user(user.id) + self.assertIsNotNone(cached_user) + + user.first_name = "Updated" + user.save() + + cached_user_after_update = get_cached_user(user.id) + self.assertIsNotNone(cached_user_after_update) \ No newline at end of file