Django 사이트에서 익명 사용자에게 세션 메시지를 보내는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/697902

문제

나는 종종 다음을 사용하여 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

또한 각 요청에서 세션 객체를 확인하여 미들웨어 클래스를 만들고 빌드 업/찢어집니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top