Python/Django

[Django] Message Framework

yubi5050 2022. 6. 4. 21:24

Django 에서는 사용자 요청에 대한 응답의 일환으로 일회용 메시지 Message Framework를 제공한다. 

 

https://docs.djangoproject.com/en/4.0/ref/contrib/messages/

 

The messages framework | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

Message tags는 DEBUG, INFO, SUCCESS, WARNING, ERROR 5종류가 있다.

 

 

Message Framework 를 사용하는 방법은 다음과 같다.

  • 1) Settings.py에 message app과 Middleware를 추가해준다. (기본적으로 들어가 있기도 함)
  • 2) Request (ex. HTML - Form) 을 작성한다.
  • 3) views.py message관련 라이브러리를 import 하고 tags와 message를 설정한다.
  • 4) Django template을 이용해 message를 출력한다.

 


 

1. settings.py

INSTALLED_APPS = [
	...
    'django.contrib.messages',
	...
]

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

 

2. HTML Form 작성

<form class="form-area" method="post" action="{% url 'join' %}">
    {% csrf_token %}
    <div class="form-group mt-2 mb-2">
        <input type="email" class="form-control" id="user_email" name = "user_email" aria-describedby="emailHelp" placeholder="아이디 (Email)">
    </div>
</form>

 

3. views.py 

from django.contrib import messages

def join_view(request):
    if request.method == 'POST':
        user_email = request.POST.get('user_email', '')

		# validation 1 ) user email 빈칸 아닌지~
        if user_email == '':
            messages.error(request, '사용자 아이디와 패스워드는 필수 값 입니다.')
            return render(request, 'join.html')

 

4. message.html 작성

- 일반적으로 Tag에 따라 보내는 메시지를 구분한다.

{% if messages %}
    {% for message in messages %}
        {% if message.tags == 'success' %}
            <div class="alert alert-success" role="alert">
                <button type="button" class="close" data-dismiss="alert" aria-label="Close">×</button>
                <strong>{{message}}<strong>
            </div>
        {% elif message.tags == 'error' %}
            <div class="alert alert-danger" role="alert">
                <button type="button" class="close" data-dismiss="alert" aria-label="Close">×</button>
                <strong>{{message}}<strong>
            </div>
        {% endif %}
    {% endfor %}
{% endif %}

 

 


 

구현 화면

message.tags = success

 

message.tags = error