상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
뉴질랜드 우유의 비타민 D 함량은 어떻게 되나요?
뉴질랜드 우유의 주요 경쟁자는 누구인가요?
뉴질랜드 우유의 소비자 트렌드 변화는 어떤가요?
리버풀 FC의 주요 라이벌전에서의 기억에 남는 순간은 무엇인가요?
VWAP를 사용한 차트 분석 방법은?
VWAP와 스토캐스틱 오실레이터의 결합 방법은?
말투가 사회적 상호작용에 미치는 영향은?
말투가 나의 대화에서의 연애 관계에 미치는 영향은?
시드니의 1월 날씨는 어떤 특징이 있나요?
체리 나무는 어떻게 기르나요?
체리의 재배를 위한 농업 기술은 무엇인가요?
2월 시드니의 최저 기온은 얼마인가요?
Previous
Next
수정하기 - 파이썬 장고의 시그널(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순위입니다.
수정하기
취소하기