Djangoのサイトで匿名ユーザーにセッションメッセージを送信する方法?
-
22-08-2019 - |
質問
私は頻繁に使用して私のDjangoアプリケーションのビューでユーザーにログインするためのユーザーアクションに関するメッセージを表示します:
request.user.message_set.create("message to user")
私は匿名(ログインしていない)ユーザーのための同じことを行うことができますどのように?そこ匿名ユーザーのためのからrequest.userはありませんが、Djangoのドキュメントでは、上記のコードと同じことを行うことができます「セッション」のミドルウェアを使用しているという。セッションミドルウェアにリンクDjangoのドキュメントは、それが可能であると主張し、私はセッションのドキュメントからそれを行う方法を見つけることができませんでした。
解決
http://code.google.com/p/django-sessionを参照してください。 -messages / のDjangoのツリーでセッションベースのメッセージの土地を有効にパッチまで(私が最近見たように、それは1.2用にマークされていますので、迅速な追加のための望みのない...)。
同様の機能を持つ別のプロジェクトでは、Djangoのフラッシュ( http://djangoflash.destaquenet.com/する)でありますます。
他のヒント
このコンテキストプロセッサを使用して、私が何をすべきかです。
project/application/context.py
(メッセージをチェックして、コンテキストに追加します):
def messages(request):
messages = {}
if 'message' in request.session:
message_type = request.session.get('message_type', 'error')
messages = {'message': request.session['message'],
'message_type': message_type}
del request.session['message']
if 'message_type' in request.session:
del request.session['message_type']
return messages
project/settings.py
(TEMPLATE_CONTEXT_PROCESSORS
にコンテキストを追加)
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.request",
"django.core.context_processors.debug",
"django.core.context_processors.media",
"django.core.context_processors.auth",
"project.application.context.messages",
)
関数messages
上記では、リクエストごとに呼び出され、何でも、それは返すには、テンプレートのコンテキストに追加されます。私は、ユーザーにメッセージを与えたい場合は代わりにこれで、私はこれを行うことができます:
def my_view(request):
if someCondition:
request.session['message'] = 'Some Error Message'
最後に、ディスプレイにエラーがある場合、テンプレートであなただけチェックすることができます:
{% if message %}
<div id="system_message" class="{{ message_type }}">
{{ message }}
</div>
{% endif %}
メッセージの種類は、ちょうどそれが(「エラー」、「告知」、「成功」)であるかに応じて、スタイルに使用され、これはあなたが唯一のユーザーのために一度に1つのメッセージを追加することができます設定されている方法が、それはそれは私のために働くので、私は本当に今までに必要なすべてのです。簡単に複数のメッセージと、そのような可能にするために変更することができます。
辞書ライクオブジェクトのセッションに直接データを保存します。そして、ビュー/テンプレートには、値をチェックします。
ここでは詳細ます:
ます。http://ドキュメント。 djangoproject.com/en/dev/topics/http/sessions/#using-sessions-in-viewsする
また、各リクエストに応じてセッションオブジェクトをチェックするためのミドルウェアクラスを作成し、アップ/そこ取り壊すビルドを行うことができます。