django에서 db유저 스캔, 삭제하기 쉽게하기
django 웹프레임워크를 사용하는 프로젝트의 루트 경로의 accounts/models.py에는 user에 관한 모델을 정의해놓습니다. django패키지에서 만들어 놓은 User클래스를 가져다가 그대로 쓸 수도 있고, 새롭게 재정의 해서 쓸 수도 있습니다.
그냥 가져다가 쓰면 다음 경로의 클래스를 쓰게 되는 겁니다.
1
from django.contrib.auth.models import User
새롭게 재정의해서 쓴다고 하면,
다음과 같이 django 프레임워크의 contrib.auth.models 에 위치한 AbstractBaseUser라는 클래스를 가져와서 나만의 커스텀 User클래스를 재정의해서 쓰면 됩니다.
1
2
3
4
5
from django.contrib.auth.models import AbstractBaseUser
class User(AbstractBaseUser):
...
이렇게 일반과 커스텀 둘 다 설명드린 이유는 django에서 db에 저장한 User를 스캔하고 삭제할 때, db에 저장되어 있는 User의 모델(클래스)와 일치하는 모델을 불러와야 하기 때문입니다.
기본 User모델 사용 시:
1
2
from django.contrib.auth.models import User
커스텀 User모델 사용 시:
1
2
from accounts.models import User # 커스텀 User 모델을 사용 중인 경우
이제 메소드는 똑같습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from accounts.models import User # 커스텀 User 모델을 사용 중인 경우
# 모든 사용자 확인
def scan_user():
for user in User.objects.all():
print(user.username, user.email)
# 특정 사용자 삭제
def delete_user(email: str):
User.objects.filter(email=email).delete()
# 모든 이메일 비인증 테스트 사용자 삭제 (is_active=False 조건 추가 가능)
def delete_not_active_users():
User.objects.filter(is_active=False).delete()
# 모든 사용자 삭제 (is_active=False 조건 추가 가능)
def delete_all_users():
User.objects.all().delete()
실제로 사용하려면 다음과 같이,,
1
2
3
4
5
6
python manage.py shell
>> exec(open("zzz_test_dev/django_user_commands.py", encoding="utf-8").read())
>> scan_user()
메일1@gmail.com
메일2@gmail.com
>> delete_not_active_user()
active하지 않은 메일을 전부 삭제했습니다. ㅎㅎ
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.