수학과의 좌충우돌 프로그래밍

[Django]message framework 알아보기 본문

웹프로그래밍/Django

[Django]message framework 알아보기

ssung.k 2019. 7. 6. 04:15

로그인을 실패했을 때 사용자가 확인 할 수 있도록 알람을 띄워줘야 합니다. javascript alert 을 통해서 알람을 쉽게 띄울 수 있지만 로그인에 성공했을 때, 혹은 실패했을 때 다른 알람을 띄워줘야 합니다. 구현하는 방법이야 다양하겠지만 django 의 messages framework 를 사용해보았습니다.

Messages Framework

위의 예시처럼 로그인을 실패하였습니다. 등 과 같은 1회성 메세지를 담는 용도로 사용합니다. 메세지를 남기는 방식은 HttpRequest 인스턴스를 통해 남기며 1회성이기 때문에 새로고침하면 사라집니다. 그렇기 때문에 전체 유저에게 한 번에 메세지를 보낼 수 없고 한 명의 유저에 대해서 메세지를 보낼 수 있습니다.

Message level

message 에는 레벨이 존재합니다. 레벨의 역할은 레벨에 다른 설정을 해줌으로서 각 레벨을 구별해줍니다. 예를 들어 에러를 의미하는 message는 빨간 글씨로, 성공을 의미하는 글씨는 초록색 글씨로 구현을 할 수 있습니다. 메세지의 종류는 다음과 같습니다.

  • DEBUG : 디폴트 설정 상으로 메세지를 남겨도 무시합니다.
  • INFO
  • SUCCESS
  • WARNING
  • ERROR

debug level 을 사용하기 위해서는 settings.py 를 변경해주어야 합니다.

from django.contrib.messages import constants as messages_constants

MESSAGE_LEVEL = messages_constants.DEBUG

 

Message 저장

메세지를 저장하는 방식으로는 크게 두 가지가 있습니다.

# views.py

from django.contrib import messages

# 원래 방법
messages.add_message(request, messages.INFO, '정보를 나타냅니다.')

# 축약된 방법
messages.info(request, '정보를 나타냅니다.')

messages 는 자주 사용되기 떄문에 별도의 랜더링 없이도 바로 사용이 가능합니다. 그 이유는 settingsTEMPLATES 에서 messages 를 이미 랜더링 하고 있기 때문입니다. 자주 사용하기 때문에 자체적으로 미리 구현한 것이죠.

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages', # 여기입니다.
            ],
        },
    },
]

 

Message 출력

메세지는 request 를 통해 messages 로 넘어오므로 다음과 같이 화면에 출력합니다.

{% if messages %}
	{% for message in messages %}
		{{ message.tags }}
		{{ message.message }}
	{% endfor %}
{% endif %}

이 때 tag 는 해당 message의 level 을, message 는 해당 message 의 내용을 출력하게 됩니다.

 

 

Comments