일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 파이썬 알고리즘
- 파이썬
- Baekjoon
- DRF
- PYTHON
- 알고리즘
- HTML
- 알고리즘 풀이
- CSS
- java
- Algorithm
- django widget
- es6
- 백준
- 알고리즘 문제
- django ORM
- js
- Git
- form
- 알고리즘 연습
- 장고
- API
- c++
- django rest framework
- AWS
- react
- javascript
- web
- MAC
- Django
- Today
- Total
수학과의 좌충우돌 프로그래밍
[Django]message framework 알아보기 본문
로그인을 실패했을 때 사용자가 확인 할 수 있도록 알람을 띄워줘야 합니다. 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
는 자주 사용되기 떄문에 별도의 랜더링 없이도 바로 사용이 가능합니다. 그 이유는 settings
에 TEMPLATES
에서 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 의 내용을 출력하게 됩니다.
'웹프로그래밍 > Django' 카테고리의 다른 글
[Django] Channels, 비동기적 채팅 구현하기 - WebSocket (1) (4) | 2019.07.10 |
---|---|
[Django] ChoiceField 사용하기 (4) | 2019.07.06 |
[Django]Date와 Time을 나타내는 template filter (0) | 2019.07.05 |
[Django] 모델 관계 제거하기 (0) | 2019.06.02 |
[Django] render 와 redirect 의 차이 (11) | 2019.05.21 |