質問

機能があります:

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

これは、Django-Registrationからのuser_activated信号が呼び出された場合に呼び出されます。

これを使用して信号と関数を接続します。

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

ただし、ユーザーがアクティベーションリンクをクリックすると、電子メールで受け取ったときに関数は呼び出されません。

ここで何が恋しいですか。

役に立ちましたか?

解決

このような関数:

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

そして、このような接続呼び出し:

user_activated.connect(create)

仕事はします。私は私のsignals.pyファイルにこれらを持っています。

他のヒント

django-registrationアプリが実際にインストールされていなかったが、信号のためにリッスンするコードが適切に呼び出されないプロジェクトにコピーされただけです。

Django-Registration V0.8から ドキュメンテーション:

登録/アクティベーション信号を聞く関数がありますが、呼び出されていません!

これの最も一般的な原因は、通常のようにインポートパスに直接インストールするのではなく、PythonインポートパスにあるサブディレクトリにDjango-Registrationを配置することです。その場合のDjango-Registrationからのインポートは、信号ハンドラーを誤って接続するなど、さまざまな問題を引き起こす可能性があります。たとえば、django_appsという名前のディレクトリ内にdjango-registrationを配置し、そのように参照する場合、コードがこれを行う状況になります。

from django_apps.registration.signals import user_registered

しかし、Django-Registrationは次のようになります。

from registration.signals import user_registered

Pythonの観点から、これらのインポートステートメントは2つの異なるモジュールの2つの異なるオブジェクトを参照するため、2番目のインポートを使用して信号を送信した場合、最初のインポートから信号に接続された信号ハンドラーは呼び出されません。

この問題を回避するために、インポートパスに直接Django-Registrationをインストールする標準的な慣行に従ってください。独自のモジュール名で常に参照してください。 Djangoアプリケーションの使用)。

user_activated それ自体は信号です。したがって、パラメーターを使用して自分自身を送信する必要があります。送信者、つまりユーザー、リクエストを除いて2つの引数が必要です

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

Foo バックエンドクラスは、ユーザーをアクティブにするために使用されます。

信号処理方法をその信号に接続するコードは間違いなくロードされていますか? (その直後に印刷局でテストすることができます)。特定のアプリをそのアプリからインポートして、特定のアプリの信号ハンドラーをロードすることを確認できます __init__.py:

from nameofapp.nameoffilewithhandlersinit import *

詩それはDispatch_uidのタイプミスですか、それとも意図的な名前ですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top