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 Flash입니다 (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 %}
메시지 유형은 내용("오류","알림","성공")에 따라 스타일을 지정하는 데 사용되며 이것이 설정되는 방식에서는 사용자에게 한 번에 하나의 메시지만 추가할 수 있지만 그게 전부입니다. 나는 정말로 필요하므로 그것은 나에게 효과적입니다.여러 메시지 등을 허용하도록 쉽게 변경할 수 있습니다.
DICT와 같은 객체 인 세션에 직접 데이터를 저장하십시오. 그런 다음보기/템플릿에서 값을 확인하십시오.
자세한 내용 :
http://docs.djangoproject.com/en/dev/topics/http/sessions/#using-sessions-in-views
또한 각 요청에서 세션 객체를 확인하여 미들웨어 클래스를 만들고 빌드 업/찢어집니다.