def test_get_following_user_id_set(self): FriendshipService.invalidate_following_cache( from_user_id=self.user2.id) user_id_set_2 = FriendshipService.get_following_user_id_set( self.user2.id) self.assertEqual(user_id_set_2, {self.user1.id, self.user3.id}) user_id_set_1 = FriendshipService.get_following_user_id_set( self.user1.id) self.assertEqual(user_id_set_1, {self.user2.id}) Friendship.objects.filter( from_user=self.user2, to_user=self.user3, ).delete() Friendship.objects.filter( from_user=self.user1, to_user=self.user2, ).delete() # mannually clear the cache FriendshipService.invalidate_following_cache( from_user_id=self.user2.id) user_id_set_2 = FriendshipService.get_following_user_id_set( self.user2.id) self.assertEqual(user_id_set_2, {self.user1.id}) # cache automatically cleared in delete() by listener user_id_set_1 = FriendshipService.get_following_user_id_set( self.user1.id) self.assertEqual(len(user_id_set_1), 0) # cache automatically cleared in create() by listener Friendship.objects.create(from_user=self.user1, to_user=self.user3) user_id_set_1 = FriendshipService.get_following_user_id_set( self.user1.id) self.assertEqual(user_id_set_1, {self.user3.id})
def test_get_followings(self): user1 = self.create_user('user1') user2 = self.create_user('user2') for to_user in [user1, user2, self.dongxie]: self.create_friendship(from_user=self.linghu, to_user=to_user) FriendshipService.invalidate_following_cache(self.linghu.id) user_id_set = FriendshipService.get_following_user_id_set(self.linghu.id) self.assertSetEqual(user_id_set, {user1.id, user2.id, self.dongxie.id}) FriendshipService.unfollow(self.linghu.id, self.dongxie.id) FriendshipService.invalidate_following_cache(self.linghu.id) user_id_set = FriendshipService.get_following_user_id_set(self.linghu.id) self.assertSetEqual(user_id_set, {user1.id, user2.id})
def follow(self, request, pk): # check if user with id=pk exists self.get_object() # /api/friendships/<pk>/follow/ serializer = FriendshipSerializerForCreate(data={ 'from_user_id': request.user.id, 'to_user_id': pk, }) if not serializer.is_valid(): return Response({ "success": False, "message": "Please check input.", "errors": serializer.errors, }, status=400) instance = serializer.save() FriendshipService.invalidate_following_cache(request.user.id) return Response( FollowingSerializer(instance, context={'request': request}).data, status=status.HTTP_201_CREATED, )
def friendship_changed(sender, instance, **kwargs): # importing in the method to prevent circular dependency from friendships.services import FriendshipService FriendshipService.invalidate_following_cache(instance.from_user_id)
def invalidate_following_cache(sender, instance, **kwargs): from friendships.services import FriendshipService FriendshipService.invalidate_following_cache(instance.from_user_id)
def friendship_changed(sender, instance, **kwargs): # import 写在函数里面避免循环依赖 from friendships.services import FriendshipService FriendshipService.invalidate_following_cache(instance.from_user_id)
def friendship_changed(sender, instance, **kwargs): # put import inside function to avoid circular dependency from friendships.services import FriendshipService FriendshipService.invalidate_following_cache(instance.from_user_id)
def friendship_changed(sender, instance, **kwargs): # put import inside function to prevent cycling dependence from friendships.services import FriendshipService FriendshipService.invalidate_following_cache(instance.from_user_id)
def invalidate_following_cache(sender, instance, **kwargs): # 如果这个import放在函数外面,会出现循环引用的问题 from friendships.services import FriendshipService FriendshipService.invalidate_following_cache(instance.from_user_id)