장고 사용자 차단 목록 관리 (조회, 추가, 해제 및 차단 여부 확인하기)
이전 글에서 Django 차단 모델을 확장하는 다양한 필드를 소개했었는데, 이번에는 그 차단 기능을 좀 더 구체적으로 관리하는 방법을 다뤄봤다. 특히, 차단한 사용자 목록을 조회하거나 차단을 추가, 해제하는 방법에 대해 알아보는 과정이었다.
차단한 사용자 목록 가져오기
먼저, 사용자가 차단한 사용자 목록을 조회하는 방법을 살펴봤다. User 모델의 blocking 필드를 통해 간단히 차단한 사용자 목록을 가져올 수 있다. 이번에도 ORM을 활용해 데이터베이스 쿼리를 작성할 필요 없이, Django에서 제공하는 메서드를 사용했다.
user = User.objects.get(username='example_user')
blocked_users = user.blocking.all()
이렇게 하면, 사용자가 차단한 모든 사용자를 쉽게 가져올 수 있어서 편리했다.
차단한 사용자 추가
다음으로, 새로운 사용자를 차단하는 방법을 구현해봤다. Block 모델의 인스턴스를 생성하는 방식으로, 차단 관계를 손쉽게 설정할 수 있었다.
block = Block.objects.create(blocker=user1, blocked=user2)
이 방법은 단순하면서도 효율적으로 차단을 관리할 수 있게 도와줬다.
차단된 사용자 해제
차단을 해제하는 방법도 간단했다. 차단 관계에 해당하는 레코드를 찾아서 삭제만 해주면 된다. 역시 ORM 덕분에 SQL을 직접 작성할 필요가 없어 작업 속도가 빨랐다.
Block.objects.filter(blocker=user1, blocked=user2).delete()
차단 여부 확인
특정 사용자가 다른 사용자를 차단했는지 확인하는 방법도 중요한 기능이었다. 이를 위해 .exists() 메서드를 사용하여 차단 관계가 존재하는지 여부를 빠르게 확인할 수 있었다.
is_blocked = Block.objects.filter(blocker=blocker_user, blocked=blocked_user).exists()
이 메서드는 조건에 맞는 레코드가 있으면 True, 없으면 False를 반환해준다.
차단된 사용자 목록 및 수 가져오기
또한, 특정 사용자가 차단한 사용자 목록을 가져오는 방법과 함께, 그 수를 조회하는 기능도 구현해봤다. .values_list()와 .count() 메서드를 활용해, 차단된 사용자 목록과 그 개수를 쉽게 조회할 수 있었다.
blocked_users = Block.objects.filter(blocker=blocker_user).values_list('blocked', flat=True)
blocked_count = Block.objects.filter(blocker=blocker_user).count()
종합 예제
이 모든 기능을 종합한 차단 목록 관리 예제를 작성해봤다. 사용자 차단 추가, 목록 조회, 차단 해제, 차단 여부 확인까지 한 번에 처리하는 코드를 구현해 보니, ORM이 얼마나 강력한지 다시금 실감하게 됐다.
user = User.objects.get(username='example_user')
blocked_user = User.objects.get(username='another_user')
Block.objects.create(blocker=user, blocked=blocked_user)
blocked_users = user.blocking.all()
for blocked in blocked_users:
print(blocked.blocked.username)
Block.objects.filter(blocker=user, blocked=blocked_user).delete()
is_blocked = Block.objects.filter(blocker=user, blocked=blocked_user).exists()
print("차단 여부:", is_blocked)