2016-07-20 3 views
0

質問によれば、ユーザがログオンしたときに変数を設定して、ログアウトまたはブラウザを閉じるときにこの変数を削除したいと思っています。Djangoのログイン時にセッション変数を設定するミドルウェアを作成する方法は?

私はこれを達成するために私のカスタムログインビューを書くことを考えましたが、おそらくミドルウェアが優れた解決策です。

+0

http://stackoverflow.com/questions/14465993/how-can-i-set-and-get-session-variable-in-django –

+0

その答えはセッションに変数を設定することです、私の質問に関連していますミドルウェア。 @AK便利な質問の下投票のために – realnot

+0

djangoにはデフォルトのセッションミドルウェアがあります。だからなぜあなたは別のものを使う必要があるのですか? –

答えて

0

ミドルウェアは、解決策を達成する正しい方法ではありませんでした。私は信号を発見し、私はこのように私の解決策を実装:

@receiver(user_logged_in) 
def sig_user_logged_in(sender, user, request, **kwargs): 
    moderator = get_or_none(CompanyModerator, moderator__user=request.user) 
    if moderator: 
     if 'company_id' not in request.session: 
      request.session['company_id'] = moderator.company.id 

差がミドルウェアは、ユーザがログインして取得するときに/アウトニーズだけで何かをされた各ジャンゴ要求、でトリガされていることです。ユーザーがログイン/ログアウトするたびに、データ/オブジェクトモデルなどをセッションに追加して、ウェブサイトのすべてのユーザーを追跡します。

あなたはどう思いますか?

1

あなたの質問にすべてのコメントを行った後、私は最後のコメントで@akhil viswamと同じと言うでしょう。

しかし、今、あなたはいくつかのカスタムタスクを実行したいことを指定した場合、あなたはこのように、独自のカスタムミドルウェアを書くことができることを - >https://github.com/ankushrgv/notification/blob/master/apps/accounts/middlewares.py

してから、このようなあなたのsettings.pyに含める - >https://github.com/ankushrgv/notification/blob/master/config/settings.py

私は基本的に、Redisでuser_id:session_idのキー値のペアを書いていました。その後、リアルタイム通知を表示するためにそれらのビューを読み込みましたが、ログインしているユーザーにしか表示されませんでした。

これは、独自のカスタムミドルウェアを作成する方法について、適切なアイデアを提供したいと考えています。

関連する問題