반응형

Django Messages Framework는 사용자에게 일회성 알림 메시지를 표시할 수 있는 기능이다. 이 프레임워크를 사용하면 작업 완료, 오류 발생, 경고 등 다양한 상황에서 사용자에게 피드백을 제공할 수 있다.



설정하기

Messages Framework를 사용하기 위해서는 다음 설정이 필요하다:

# settings.py
INSTALLED_APPS = [
    'django.contrib.messages',
    # ...
]

MIDDLEWARE = [
    'django.contrib.messages.middleware.MessageMiddleware',
    # ...
]

 

메시지 레벨

Django는 5가지 종류의 메시지 레벨을 제공한다:

from django.contrib import messages

messages.success(request, '성공 메시지')  # 초록색 알림
messages.error(request, '오류 메시지')    # 빨간색 알림
messages.warning(request, '경고 메시지')  # 노란색 알림
messages.info(request, '정보 메시지')     # 파란색 알림
messages.debug(request, '디버그 메시지')  # 회색 알림

 

View에서 사용하기

실제 뷰에서는 다음과 같이 사용할 수 있다:

from django.shortcuts import render

def my_view(request):
    messages.info(request, '처리가 완료되었습니다.')
    return render(request, 'my_template.html')
from django.contrib import messages
from django.shortcuts import redirect

def user_profile(request):
    if request.method == 'POST':
        try:
            # 프로필 업데이트 로직
            user.save()
            messages.success(request, '프로필이 성공적으로 업데이트되었습니다.')
            return redirect('profile')
        except Exception as e:
            messages.error(request, f'오류가 발생했습니다: {str(e)}')
            return redirect('profile')
            
def create_post(request):
    form = PostForm(request.POST)
    if form.is_valid():
        form.save()
        messages.success(request, '포스트가 생성되었습니다.')
    else:
        messages.error(request, '입력 값을 확인해주세요.')
    return redirect('post-list')

redirect()의 URL을 처리하는 view함수가 반환하는 템플릿 파일 안에서, messages.sucess()messages.error() 등의 에러메시지가 messages로 접근 가능하다.

그 이유는 Messages framework는 한 view에서 설정한 메시지를 다음 요청의 템플릿에서도 접근할 수 있도록 설계되어 있기 때문이다. 이것이 가능한 이유는:

  1. Messages framework가 메시지를 세션에 저장하기 때문이다.
  2. 메시지는 한 번 표시되고 나면 자동으로 세션에서 삭제된다. (아래 내용 참고)

 

템플릿에서 표시하기

메시지를 템플릿에서 표시하는 방법이다:

{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <div class="alert alert-{{ message.tags }}">
        {{ message }}
    </div>
    {% endfor %}
</ul>
{% endif %}

메시지는 한 번 표시된 후 자동으로 세션에서 삭제된다 (정확히는 템플릿에서 messages 변수를 iterate할 때 삭제된다).

따라서 동일한 요청 내에서 다시 messages를 iterate하면 메시지가 없다. 이는 같은 메시지가 여러 번 표시되는 것을 방지하기 위한 설계이다.

 

추가 기능

extra_tags: 추가 CSS 클래스 지정 가능.

messages.success(request, '저장되었습니다', extra_tags='custom-class')

 

실제 사용 팁

  1. 주요 CRUD 작업 후에는 피드백을 제공하는 것이 좋은데, 이때 messages는 좋은 도구가 될 수 있다.
  2. 오류 메시지는 구체적으로 작성하되, 보안에 민감한 정보는 제외해야 한다.
  3. Bootstrap이나 Tailwind CSS와 함께 사용하면 멋진 UI를 만들 수 있다.

 

마무리

Django Messages Framework를 활용하면 사용자 경험을 크게 향상시킬 수 있다. 적절한 피드백은 웹 애플리케이션의 사용성을 높이는 핵심 요소이기 때문이다.

반응형

+ Recent posts