1

最近、Django Web アプリのモジュールが django.contrib.messages を使用していることに気付きました。django.contrib.messages.context_processors.messagesただし、テンプレートのコンテキスト プロセッサにはプロセッサが追加されていませんでした。

これを本番環境にプッシュすると、ユーザーが生成したすべてのページの古いメッセージがすべて表示されるのではないかと心配しています。からすべてのユーザーに対してこれらのメッセージを消去する方法はありますdjango shellか?

4

2 に答える 2

1

セッションに既にメッセージが含まれているユーザーのメッセージが表示されます。したがって、いくつかのオプションがあります。

  1. デフォルト設定を使用していて、セッション データがデータベース テーブルに保存されている場合は、アクティブなセッションを反復処理して、保存されているメッセージがあるかどうかを確認できます。

    from django.contrib.sessions.models import Session
    for s in Session.objects.all():  
        decoded_data_dict = s.get_decoded()  
        # Now you look for messages in the dict, delete them (del dict[key]) and save the session 
    
  2. デフォルト設定を使用せず、セッション データを別の場所 (Redis?) に保存しない場合、または前の方法に進みたくない場合は、すべてのセッションを完全に削除できます。これには、ユーザーがログアウトされるという欠点があります (これは許容できる結果かもしれません)。

  3. ユーザーのリクエストごとにこれを行うことができます.すべてのセッションオブジェクトを削除せずにセッションのメッセージを削除する必要があります. 次のようなことができます:

    for key in request.session.keys():  
        del request.session[key]
    

または、推奨される django 風の方法を使用してそれらを削除します。

    storage = messages.get_messages(request)
    storage.used = True

この方法の欠点は、既にログインしているユーザーの最初の訪問である場合にのみメッセージを削除する必要があり、ユーザーが今後メッセージを表示できるようにするため、再度実行しないことです。 .

  1. ミドルウェアを削除して、メッセージを完全に手放してください。必要ない場合は使用しないでください。
于 2016-09-15T19:13:29.857 に答える