2

新しいユーザーが作成されたときに、セッションの一部の情報を保持したい

たとえば、ユーザーがセッションに保存したものを、ユーザーが登録 (またはログイン) したら使用したいなどです。

ユーザーモデルでpost_saveシグナル(または認証ログインシグナル)を使用しますが、シグナルがリクエストを送信しないか、送信されたシグナルにセッションを送信しないようです。また、ユーザーだけからセッションを簡単に取得できないようです。

私はDjango 1.4を使用しています

編集:例を挙げましょう。

問題は次のとおりです。ユーザーがログインする前にユーザーのアクティビティに関する情報を保持したい場合がありますが、ログインする前にこの情報をどこに保存すればよいでしょうか? 適切な場所はセッションです (または、その場しのぎのユーザーのようにセッションを使用して、データベースに保持されているデータをセッションにリンクすることもできます)。

いずれにせよ、彼らがログインするまで、私は彼らのセッションをユーザー資格情報のように単純に使用し、Cookie が存在する限り存続する情報を保存することができます (匿名ユーザーを確実に追跡するにはどうすればよいでしょうか?)。

しかし、登録 (またはログイン) したら、その情報をセッションから適切にアカウントに移動したいと考えています。正当な理由の 1 つは、匿名ユーザーのデータを定期的に削除することは理にかなっていますが、登録ユーザーのデータは保持されます。

これを行うには、ハンドラから new-user シグナルへのセッション (リクエスト経由の可能性があります) へのアクセスが必要なだけなので、セッション内のデータから 1 回限りの転送を行うことができます。しかし、新しいユーザー シグナルはセッション (または要求) を保持しません。

4

2 に答える 2

3

仕事のためにdjango.contrib.sessionsandを使用している場合、セッション データはlogin後に自動的に保持されます。django.contrib.auth

また、user_logged_in実際にはリクエストと一緒にシグナルを送ります。

編集:

したがって、user_logged_in信号を使用してください。リクエストを載せます。認証されていないユーザーのデータを保存する特定のキーを選択します (例: "_anonymous_data")。信号の処理中にそのキーがオンに設定されている場合は、オブジェクトのrequest.sessionデータを書き換えて、 と を呼び出すだけです。request.user.get_profile()savedel request.session["_anonymous_data"]

それを取得するコードは次のようになります。

if request.user.is_authenticated():
    user_data = request.user.get_profile()
else:
    user_data = requerst.session["_anonymous_data"]

もちろんただの擦り傷です。セッション キーをハードコーディングしたり、ビューにそのようなロジックを記述したりしたくありません。アプリケーション全体で必要な場合は、リクエストを受け取る抽象化クラスに埋め込んで__init__ください。

于 2012-10-23T09:20:24.917 に答える
-1

セッションを使用してみることができます:

https://docs.djangoproject.com/en/dev/topics/http/sessions/?from=olddocs

于 2012-10-22T22:37:21.223 に答える