2012-12-13 1 views

답변

1

앞에서 언급 한 문서에는 예제에서 사용 된 두 가지 신호가 있습니다. 첫 번째는 notifications.notify이고 다른 하나는 django.db.models.signals.post_save입니다.

알림 앱을 사용하려면 기본적으로 첫 번째 신호 만 필요합니다. 예를 들어, 어디 코드에서 당신은 쓸 수 있습니다 :

notify.send(request.user, verb='reached level 10') 

그러나, 작가가 다른 신호를 처리하면 (또는 경우) 후 통지 신호 를 방출해야하는 것이 좋습니다. 따라서 아래 예 :

이다
def my_handler(sender, instance, created, **kwargs): 
    #other routines here 
    notify.send(instance, verb='was saved') 

post_save.connect(my_handler, sender=MyModel) 

에는 post_save 신호 처리기의 일부로서 통지 신호를 송신.

+0

안녕하세요, 예를 들어 내 사용자 모델의 사용자가 다른 사용자의 사진에 댓글을다는 알림을 어떻게 작성할 수 있습니까? 예를 들어, 'Bob은 카일의 사진에 댓글을 달았습니다'라는 활동 피드 형식입니까? – noahandthewhale

+0

앱을 사용하지 않았습니다. 그러나 문서에서, 나는이 문장을 사용할 수 있다고 생각한다 : notify.send (request.user, 동사 = 'created comment', target = photo) 당신의 경우 액터가 Bob이고 동사가 'commented' , 대상은 이미지 모델입니다. – pram

+0

감사합니다. Pram, 첫 번째 신호는 실제 알림 자체이고 두 번째 핸들러는 알림을 생성하는 신호입니다. 맞습니까? – noahandthewhale

1

장고에는 특정 이벤트가 발생할 때 발생하는 기능 (신호 처리기)을 쉽게 부착 할 수있는 signalling system이 있습니다. 이 같은 모델 객체 저장하거나 삭제하는 경우와 같이 기본 이벤트의 수는 있지만, 당신은 또한 쉽게 나중에 코드를 부착 할 수있게 자신의 이벤트를 만들 수 있습니다

https://docs.djangoproject.com/en/dev/topics/signals/

장고는 "신호를 포함 Dispatcher "를 사용하면 프레임 워크의 다른 위치에서 작업이 발생할 때 분리 된 응용 프로그램에 알릴 수 있습니다. 간단히 말해 신호를 통해 특정 발신자는 수신자에게 어떤 조치가 취해 졌음을 알릴 수 있습니다. 특히 많은 코드가 동일한 이벤트에 관심이있을 때 유용합니다.

signals에 주목해야 할 매우 중요한 점은 이러한 조치가 요청/응답 루프의 외부에 비동기 적으로 발사 있다고 생각하기 쉽습니다 것입니다, 그러나 이것은 사실이 아니다. 그것들은 이벤트에 액션을 추가하는 직관적 인 방법입니다 (즉, X가 저장되면 Y를 수행).

관련 문제