상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - 파이썬 장고의 시그널(Signals) 기능을 사용해 이벤트 기반 로직을 구현하는 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
# Django Signals: 이벤트 기반 로직 구현하기Django는 웹 <a href='https://sangseek.com/sangseeks/애플/ko'>애플</a>리케이션 개발을 위한 강력한 프레임워크로, 다양한 기능을 제공합니다. 그 중 하나가 바로 Signals 입니다. Signals는 특정 이벤트가 발생했을 때 자동으로 호출되는 <a href='https://sangseek.com/sangseeks/함수/ko'>함수</a>(<a href='https://sangseek.com/sangseeks/리시버/ko'>리시버</a>)를 정의할 수 있게 해줍니다. 이를 통해 코드의 결합도를 낮추고, 이벤트 기반 로직을 쉽게 구현할 수 있습니다.## 1. Django Signals의 기본 개념Django의 Signals는 특정 이벤트가 발생했을 때 다른 코드 조각을 실행할 수 있게 해주는 메커니즘입니다. 예를 들어, 모델 인스턴스가 생성되거나 수정될 때, 또는 사용자 인증이 이루어질 때 특정 작업을 수행하도록 설정할 수 있습니다.## 2. Signal 사용 예제 2.1. Signal 임포트하기Django에서 제공하는 기본 Signals를 사용하기 위해서는 먼저 필요한 모듈을 임포트해야 합니다. 일반적으로 사용되는 Signal은 `post_save`, `pre_save`, `post_delete` 등이 있습니다.```pythonfrom django.db.models.signals import post_savefrom django.dispatch import receiver``` 2.2. Signal 리시버 정의하기리시버는 Signal이 발생했을 때 실행될 함수를 의미합니다. `@receiver` 데코레이터를 사용하여 Signal과 리시버를 연결할 수 있습니다.```pythonfrom django.db import modelsclass MyModel(models.Model): name = models.CharField(max_length=100)@receiver(post_save, sender=MyModel)def my_model_post_save(sender, instance, created, kwargs): if created: print(f'New instance created: {instance.name}') else: print(f'Instance updated: {instance.name}')```위의 예제에서 `MyModel`이 저장될 때마다 `my_model_post_save` 함수가 호출됩니다. 인스턴스가 새로 생성되었는지 업데이트되었는지를 확인할 수 있습니다. 2.3. Signal 연결하기Signal을 연결하기 위해서는 `apps.py` 파일에서 `r<a href='https://sangseek.com/sangseeks/eady/ko'>eady</a>` 메서드를 사용하여 Signal을 등록하는 것이 일반적입니다. 이렇게 하면 Django가 앱을 로드할 때 Signal이 자동으로 연결됩니다.```python# myapp/apps.pyfrom django.apps import AppConfigclass MyAppConfig(AppConfig): name = 'myapp' def ready(self): import myapp.signals # signals.py에서 Signal을 연결합니다.``` 2.4. 앱 설정하기`settings.py` 파일에서 앱을 등록할 때 `MyAppConfig` 클래스를 사용해야 합니다.```pythonINSTALLED_APPS = [ 'myapp.apps.MyAppConfig', # 다른 앱들...]```## 3. Signal을 활용한 다양한 예제 3.1. 사용자 등록 후 이메일 발송사용자가 회<a href='https://sangseek.com/sangseeks/원가/ko'>원가</a>입을 할 때, 자동으로 환영 이메일을 발송하는 Signal을 구현할 수 있습니다.```pythonfrom django.contrib.auth.models import Userfrom django.core.mail import send_mail@receiver(post_save, sender=User)def send_welcome_email(sender, instance, created, kwargs): if created: send_mail( 'Welcome!', 'Thank you for registering.', 'from@example.com', [instance.email], fail_silently=False, )``` 3.2. 모델 삭제 후 로그 기록모델 인스턴스가 삭제될 때 로그를 기록하는 Signal을 구현할 수 있습니다.```pythonfrom django.db.models.signals import post_deleteimport logginglogger = logging.getLogger(__name__)@receiver(post_delete, sender=MyModel)def log_model_deletion(sender, instance, kwargs): logger.info(f'Instance deleted: {instance.name}')```## 4. 결론Django의 Signals 기능은 이벤트 기반 로직을 구현하는 데 매우 유용합니다. 이를 통해 코드의 결합도를 낮추고, 유지보수성을 높일 수 있습니다. 다양한 시나리오에 맞춰 Signals를 활용하여 더욱 효율적인 Django 애플리케이션을 개발해보세요.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기