티스토리 뷰
0. 들어가기전에
else로 분기하여 사용가능한 것들이 있다.
- 메세지 프레임워크를 사용하여 메인페이지로 이동
- 403 status code를 반환
alert기능 구현하기
공식사이트
검색) django messages framework (= flash message)
https://docs.djangoproject.com/en/3.0/ref/contrib/messages/
The messages framework | Django documentation | Django
The Django Software Foundation deeply values the diversity of our developers, users, and community. We are distraught by the suffering, oppression, and systemic racism the Black community faces every day. We can no longer remain silent. In silence, we are
docs.djangoproject.com
일회성 알림 메세지로 flash message라고도 한다. 왜냐하면 한번 알리고 새로고침 하면 없어진다.
즉, 임시적으로 메세지 알려준다.
읽어보면 one-titme notification message(한번만 알려준다)이다.
쿠키와 세션으로 나누어진다.

위의 내용을 보면 startproject하면 이제 포함 되어 있다고 말해준다.
settings에 미리 다 포함 시켜 놨다.
구현
기본적으로 bootstrap4가 설치.
settings.py
아래 부분의 다음 내용을 추가하자
MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
cookie가 기본값인데 우리는 session으로 쓰겠다는 설정이다.
views.py
from django.contrib import messages
messages.warning(request, 'Your account expires in three days.')
예시 코드

사실 이렇게 적어도 뜬다.
이때 주의 할 점은 redirect하면 처음부터 돌아가기 때문에 안뜬다. render해서 바로 html로 이동하기 때문에 messageframework가 뜬다.
종류는 아래와 같다
messages.debug(request, '%s SQL statements were executed.' % count)
messages.info(request, 'Three credits remain in your account.')
messages.success(request, 'Profile details updated.')
messages.warning(request, 'Your account expires in three days.')
messages.error(request, 'Document deleted.')
html
특정html에 적는 것 보단, base.html에 적는 것이 편하다.
추가적으로 하려면 하래 처럼 적어서 필요한 부분을 확인하면된다.
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
이렇게 적어준다.
여기서 더 이쁘게 하기 위해서는 bootstrap를 추가해 주면 된다.
bootstrap의
<div class="alert alert-primary" role="alert">
This is a primary alert—check it out!
</div>
과 위의 코드를 결합해보자.
최종 코드(+bootstrap)
{% if messages %}
<div class="messages">
{% for message in messages %}
<div class="alert alert-{% if message.tag %}{{ message.tags }}{% endif %}" role="alert">
{{ message }}
</div>
{% endfor %}
</div>
위의 messages를 import 선언 없이 쓸 수 있는 이유는 settings -> templates -> options -> context_processors가 html에서 기본적으로 쓸 수 있는 것들을 정의한 것 들이다. 4번째 줄은 messages를 변수로 그냥 쓸 수 있게 하는 거라고 이해하면 된다.
ex) 댓글 부분 메세지 프레임 워크 넣기
settings.py
MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
base.html
{% if messages %}
{% for message in messages %}
<div{% if message.tags %} class="alert alert-{{ message.tags }}"{% endif %}>{{ message }}</div>
{% endfor %}
{% endif %}
views.py
@require_POST
def comments_create(request, pk):
if request.user.is_authenticated:
article = get_object_or_404(Article, pk=pk)
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.user = request.user
comment.article = article
comment.save()
return redirect('articles:detail', article.pk)
else:
messages.warning(request, '댓글 작성을 위해서는 로그인이 필요합니다.')
return redirect('accounts:login')
상태코드 보여주기
우리가 반환해야 하는 것은 response object 하나이다. response object를 반환하기 위해서는 render, redirect 뿐만아니라도 반환 할 수 있는 다양한 객체들이 존재한다. 즉, 상태코드를 보여주기도 가능하다.
400 | 잘못된 요청 |
401 | 권한 없음(로그인 x) |
402 | 결제 필요 |
403 | 필요 권한이 없음(관리자 권한이 없음) |
https://docs.djangoproject.com/en/3.0/ref/request-response/
Request and response objects | Django documentation | Django
The Django Software Foundation deeply values the diversity of our developers, users, and community. We are distraught by the suffering, oppression, and systemic racism the Black community faces every day. We can no longer remain silent. In silence, we are
docs.djangoproject.com

위의 사이트 들어가서 위의 캡쳐 부분을 읽어보자.
우리는 403 에러를 보여주면서 권한이 없다는 걸 알려줘 보자.
코드는 간단하다.
views.py
~
~
~
else:
from djang.http import HttpResponseForbidden
return HttpResponseForbiden()
만약 401에러를 보여주고 싶다면, 401은 위의 객체처럼 사용가능한 것이 없기 떄문에 아래와 같이 작성한다
else:
from djang.http import HttpResponse
return HttpResponse(status=401)
- Total
- Today
- Yesterday
- Python
- read_csv
- NextJS
- UserCreationForm
- TensorFlow
- Express
- useHistory 안됨
- 자연어처리
- 자료구조
- nodejs
- BFS
- react autoFocus
- django
- 클라우데라
- react
- error:0308010C:digital envelope routines::unsupported
- Queue
- vuejs
- login
- Vue
- nextjs autoFocus
- DFS
- next.config.js
- logout
- Deque
- typescript
- mongoDB
- useState
- pandas
- JavaScript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |