기술블로그-Django편

🧪 Django shell로 클래스/메서드 유효성 확인하는 방법 총정리

Chansman 2025. 5. 19. 15:51

🧪 Django shell로 클래스/메서드 유효성 확인하는 방법 총정리

Django 개발 중 특정 클래스나 매니저, 메서드가 현재 버전에서 존재하는지, 호출 가능한지 확인하고 싶을 때, shell에서 직접 검증하는 방법을 정리합니다.


✅ 1. 기본 흐름 요약

단계 설명 예시 명령어

1단계 shell 진입 python manage.py shell
2단계 클래스 임포트 from django.contrib.auth.models import BaseUserManager
3단계 dir() 확인 dir(BaseUserManager)
4단계 hasattr()로 유무 체크 hasattr(BaseUserManager, 'make_random_password')
5단계 직접 호출 테스트 BaseUserManager().make_random_password()

🔍 2. 예시 1: make_random_password() 유효성 확인

from django.contrib.auth.models import BaseUserManager

# 1. 해당 클래스의 모든 속성 확인
print(dir(BaseUserManager))

# 2. 해당 메서드가 있는지 직접 확인
print(hasattr(BaseUserManager, 'make_random_password'))  # ✅ True or False

# 3. 실제로 호출 가능 여부 확인
print(BaseUserManager().make_random_password())  # 정상 출력 or AttributeError

📌 Django 5.x 이후 해당 메서드가 제거되어 False가 나올 수 있음


🧪 3. 예시 2: 커스텀 User 모델 매니저에서 메서드 유효성 확인

from django.contrib.auth import get_user_model
User = get_user_model()

# 매니저 타입 확인
print(type(User.objects))  # <class 'member.models.UserManager'> 등

# 메서드 유무 확인
print(hasattr(User.objects, 'make_random_password'))  # True or False

추가적으로 전체 메서드 확인:

print(dir(User.objects))

🧠 4. 예시 3: 템플릿 필터, 커스텀 클래스 유효성 확인도 가능

커스텀 필터 확인

from django.template.defaultfilters import slugify
hasattr(slugify, '__call__')  # True면 함수처럼 호출 가능

커스텀 Form 필드 메서드 확인

from myapp.forms import MyForm
form = MyForm()
hasattr(form.fields['email'], 'clean')

🛠️ 5. 유효성 점검 체크리스트

✅ shell 진입 후 아래 순서로 점검:

  • type(obj) → 실제 클래스 확인
  • dir(obj) → 포함된 메서드/속성 리스트 확인
  • hasattr(obj, 'method') → 존재 여부 확인
  • callable(obj.method) → 함수형 메서드인지 확인
  • obj.method() → 실제 호출 테스트

🎯 6. 실무에서 자주 점검하는 대상들

확인 대상 관련 예시

모델 매니저 메서드 User.objects.custom_query() 존재 여부
Django 내장 필터 slugify, truncatechars, intcomma 등 호출 가능 여부
Form 필드 속성 form.fields['email'].label 존재 여부
View 클래스 메서드 MyView.get() 오버라이드 여부

✅ 정리

Django shell은 단순 테스트용이 아니라, 실제 코드가 현재 버전에서 어떤 구조를 갖고 있는지 확인하고, 디버깅하는 데 매우 강력한 도구입니다.

앞으로 라이브러리 업그레이드나 커스텀 클래스 사용 시에도 위 방식으로 유효성을 빠르게 점검하세요!