6. 모델 인스턴스가 생성·갱신될 때 발생하는 시그널에는 어떤 것이 있나요?¶
장고의 시그널을 이용하면 모델 인스턴스의 생명주기에 따라 특정 코드가 실행되도록 예약해 둘 수 있습니다. 장고가 제공하는 시그널의 종류는 다음과 같습니다.
pre_init
post_init
pre_save
post_save
pre_delete
post_delete
이 가운데 pre_save
와 post_save
가 가장 많이 사용됩니다. 이 두 시그널을 좀 더 자세히 살펴봅시다.
6.1. 시그널과 save
메서드 재정의 비교¶
시그널을 이용하면 save
메서드를 재정의하는 것과 비슷한 효과를 누릴 수 있습니다. 그래서 어느 것을 사용해야 할지 헷갈릴 수도 있는데요, 다음 규칙에 따르시기 바랍니다.
- 다른 사람(외부 라이브러리 등)이 여러분 앱의
save
메서드를 재정의·커스터마이즈하도록 허용하려면 직접 시그널을 발생시켜야 합니다. - 여러분이 통제할 수 없는 앱의
save
메서드가 호출될 때 원하는 코드가 실행되도록 하려면post_save
시그널 또는pre_save
시그널을 이용해야 합니다. - 여러분이 통제할 수 있는 앱의 저장 방식을 손 볼 때는
save
메서드를 재정의해야 합니다.
다음은 UserToken
모델의 예입니다. 이 모델은 사용자 인증 정보를 제공하는 역할을 하며, User
가 생성될 때 함께 생성됩니다.
class UserToken(models.Model):
token = models.CharField(max_length=64)
# ...