상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - 파이썬 장고의 시그널(Signal)을 사용해 특정 이벤트에 반응하는 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Django의 <a href='https://sangseek.com/sangseeks/시그널/ko'>시그널</a>(<a href='https://sangseek.com/sangseeks/Signal/ko'>Signal</a>)은 특정 이벤트가 발생했을 때 자동으로 호출되는 함수입니다. 이를 통해 모델의 생성, 수정, 삭제와 같은 이벤트에 반응하여 추가적인 작업을 수행할 수 있습니다. 시그널을 사용하면 코드의 결합도를 낮추고, 코드의 재사용성을 높일 수 있습니다.## Django 시그널 사용하기 1. 시그널 임포트하기Django에서 제공하는 기본 시그널을 사용하기 위해서는 `django.db.models.signals` 모듈에서 필요한 시그널을 임포트해야 합니다. 가장 많이 사용되는 시그널은 `post_save`와 `post_delete`입니다.```pythonfrom django.db.models.signals import post_save, post_deletefrom django.dispatch import receiver``` 2. 시그널 핸들러 정의하기시그널 핸들러는 시그널이 발생했을 때 호출되는 함수입니다. 이 함수는 시그널이 발생한 모델 인스턴스와 추가적인 정보를 인자로 받습니다.```python@receiver(post_save, <a href='https://sangseek.com/sangseeks/sender/ko'>sender</a>=YourModel)def your_model_post_save(sender, instance, created, kwargs): if created: print(f'{instance}가 생성되었습니다.') else: print(f'{instance}가 수정되었습니다.')``` 3. 시그널 연결하<a href='https://sangseek.com/sangseeks/기위/ko'>기위</a>에서 정의한 핸들러는 `@receiver` <a href='https://sangseek.com/sangseeks/데코레이터/ko'>데코레이터</a>를 사용하여 특정 시그널과 연결됩니다. `sender` 인자는 시그널을 발생시키는 모델을 지정합니다. 4. 시그널 사용 예제아래는 `BlogPost` 모델이 저장될 때마다 자동으로 로그를 남기는 예제입니다.```python# models.pyfrom django.db import modelsclass BlogPost(models.Model): title = models.CharField(max_length=200) content = models.TextField()# signals.pyfrom django.db.models.signals import post_savefrom django.dispatch import receiverfrom .models import BlogPost@receiver(post_save, sender=BlogPost)def blog_post_saved(sender, instance, created, kwargs): if created: print(f'새로운 블로그 <a href='https://sangseek.com/sangseeks/포스트/ko'>포스트</a>가 생성되었습니다: {instance.title}') else: print(f'블로그 포스트가 수정되었습니다: {instance.title}')``` 5. 앱의 `r<a href='https://sangseek.com/sangseeks/eady/ko'>eady</a>` 메서드에서 시그널 임포트하기시그널을 정의한 후, Django가 애플리케이션을 시작할 때 시그널이 등록되도록 앱의 `ready` 메서드에서 시그널을 임포트해야 합니다.```python# apps.pyfrom django.apps import AppConfigclass BlogConfig(AppConfig): name = 'blog' def ready(self): import blog.signals # signals.py를 임포트하여 시그널을 등록합니다.``` 6. 시그널 테스트하기이제 `BlogPost` 모델의 인스턴스를 생성하거나 수정하면, 정의한 시그널 핸들러가 자동으로 호출되어 로그가 출력됩니다.```python# Django shell에서 테스트from blog.models import BlogPost# 새로운 블로그 포스트 생성post = BlogPost.objects.create(title='첫 번째 포스트', content='내용입니다.')# 블로그 포스트 수정post.title = '수정된 포스트 제목'post.save()``` 결론Django의 시그널 기능을 사용하면 특정 이벤트에 반응하여 추가적인 작업을 수행할 수 있습니다. 이를 통해 코드의 구조를 깔끔하게 유지하고, 비즈니스 로직을 효과적으로 분리할 수 있습니다. 시그널을 적절히 활용하여 Django 애플리케이션의 기능을 확장해 보세요!
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기