2010-08-07 3 views
2

연결 나는 기능을 가지고 : 장고 등록에서 user_activated 신호가 호출 될 때 호출 할 필요가장고 등록 신호

def create(sender, **kw): 
    [...] 

.

나는 신호 및이를 사용하여 함수에 연결 :

from registration.signals import user_activated 
[...] 
post_save.connect(create, sender=user_activated, dispatch_uid="users-atactivation-signal") 

을하지만 사용자가 자신이 이메일로받은 활성화 링크를 클릭 할 때 함수가 호출되지 않습니다.

여기에서 무엇을 놓칠까요?

답변

2

이 같은 기능 :

def create(sender, user, request, **kwarg): 
[...] 

이 같은 연결 전화 :

user_activated.connect(create) 

은 작업을 수행합니다. 내 signals.py 파일에 있습니다.

+0

이것이 올바른 해결책입니까? – James

+0

나는 똑같은 것을 성취하려고 노력하고 있지만 작동시키지 못했고, 나의 코드가있다. 친절하게 그것을 확인하십시오 http://stackoverflow.com/questions/3430937/connecting-a-django-registration-signal – picomon

0

user_activated 자체가 신호입니다. 그래서 매개 변수와 함께 자신을 보내야합니다. 그것은 떨어져 보낸 사람, 즉 사용자의 두 인수가 필요합니다

user_activated.send(sender=Foo, user=request.user, request=request) 

Foo가 사용자를 활성화하는 데 사용되는 백엔드 클래스입니다 요청합니다.

+0

나를 바보라고 부르지 만, 나는 그것을 얻지 못한다. 신호를 함수 호출로 연결해야한다고 생각했습니다. 네가 말한대로하면 푸는 "user_activated"가 될거야, 그렇지? 그렇다면 어디에서 전화를 걸 수 있습니까? 신호 작업에 대해 큰 실수가 생길 수도 있습니다. 아마도 나를 도울 수 있습니까? – Kai

0

해당 신호에 대한 신호 처리 방법을 확실히로드하는 코드가 있습니까? (인쇄 명령 바로 다음에 인쇄 명령으로 테스트 할 수 있습니다). 당신은 당신이 응용 프로그램의 __init__.py에서 그들을 가져 주어진 응용 프로그램에 대한 귀하의 신호 처리기를로드 확인 할 수 있습니다

from nameofapp.nameoffilewithhandlersinit import *

PS합니다. 그게 dispatch_uid의 오타입니까, 아니면 고의적 인 이름입니까?

2

django 등록 앱이 실제로 설치되지 않았지만 프로젝트에 복사 된 경우 신호를 수신하는 코드가 제대로 호출되지 않습니다. 장고 등록 v0.8 documentation에서

:

I 등록/활성화 신호, 대기를 가지고 기능을했습니다 그러나 호출하기 아니에요!

가장 일반적인 원인은 평소처럼 가져 오기 경로에 직접 을 설치하는 대신 Python 가져 오기 경로에있는 하위 디렉토리에 장고 등록을 배치하는 것입니다. 이 경우 dhango-registration을 에서 가져 오면 신호 핸들러를 잘못 연결하는 등의 다양한 문제가 발생할 수 있습니다.

from django_apps.registration.signals import user_registered

: 당신이 디렉토리 이름 django_apps 내부 장소 장고 등록을했고, 그 방법으로 그것을 참조하는 경우 코드가이 작업을 수행하는 경우 예를 들어, 당신은 상황을 끝낼 것 그러나 장고 등록을하고있을 것입니다 :

from registration.signals import user_registered

보기 파이썬의 관점에서, 이러한 import 문은 두에 두 개의 서로 다른 개체를 참조다른 모듈이므로 의 신호에 연결된 신호 처리기는 두 번째 가져 오기를 사용하여 신호를 보내면 첫 번째 가져 오기가 호출되지 않습니다.

가이 문제를 방지 가져 오기 경로에 직접 장고 등록을 설치하고 항상 자신의 모듈 이름으로 그것을 를 참조의 표준 관행에 따라하려면 등록을 (그리고 일반적으로, 항상 좋은 생각 입니다 을 설치하고 Django 응용 프로그램을 사용하는 일반적인 Python 사례를 따르십시오).