3

私は機能を持っています:

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")

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

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

4

4 に答える 4

3

このような関数:

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

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

user_activated.connect(create)

仕事をします。これらは、signals.py ファイルに含まれています。

于 2010-08-26T07:44:26.033 に答える
2

django-registration アプリが実際にはインストールされておらず、プロジェクトにコピーされただけの場合、シグナルをリッスンするコードは適切に呼び出されません。

django-registration v0.8ドキュメントから:

登録/アクティベーション信号をリッスンする関数がありますが、呼び出されません!

これの最も一般的な原因は、通常どおりインポート パスに直接インストールするのではなく、Python インポート パス上のサブディレクトリに django-registration を配置することです。その場合に django-registration からインポートすると、シグナル ハンドラーが正しく接続されないなど、さまざまな問題が発生する可能性があります。たとえば、django-registration を django_apps という名前のディレクトリ内に配置し、その方法で参照すると、コードが次のようになる状況になります。

from django_apps.registration.signals import user_registered

しかし、django-registration は次のことを行います。

from registration.signals import user_registered

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

この問題を回避するには、django-registration をインポート パスに直接インストールし、常に独自のモジュール名で参照するという標準的な方法に従ってください: registration (一般に、インストールとインストールについては通常の Python の方法に従うことをお勧めします。 Django アプリケーションを使用)。

于 2011-11-25T05:28:32.857 に答える
0

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

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

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

于 2010-08-07T15:41:33.990 に答える
0

シグナル処理メソッドをそのシグナルに接続するコードは確実にロードされていますか? (その直後に print ステートメントでテストできます)。特定のアプリのシグナル ハンドラーを、そのアプリの からインポートすることで確実に読み込むことができます__init__.py

from nameofapp.nameoffilewithhandlersinit import *

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

于 2010-08-07T15:41:50.790 に答える