Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- SQL
- 백준
- Javascript
- Django
- QuerySetAPI
- pwa적용하기
- 머신러닝종류
- TypeScript
- 셀프넘버
- react
- 플로이드워셜
- 싸피셜
- 싸피
- sqld
- 리액트
- unionfind
- VITE
- PWA
- queryset
- 알고리즘
- SSAFYcial
- SSAFY
- git
- db
- 데코레이터
- 14658
- Python
- 싸피10기
- vitepwa
- js
Archives
- Today
- Total
Meme's IT
[Django] 로그인(4) 로그인 여부에 따른 출력 본문
2023.10.05 - [Django] - [Django] 로그인(3) - 비밀번호 바꾸기
와 이어집니다.
메인페이지에서
로그인을 했을 때에는 로그인 / 회원가입이 필요없고,
로그인이 안되어 있을 때는 로그아웃 / 회원탈퇴 / 회원정보수정이 필요없다.
그래서 로그인 여부에 따라 화면 출력을 다르게 하고 싶을 때
is_authenticated함수를 활용한다.
# is_authenticated
사용자가 인증되었는지 여부를 알 수 있는 User model의 속성
인증(= 로그인)되어 있다면 True, 아니라면 False의 결과를 가짐
해당 함수를 이용해서 index 페이지를 수정할 수 있다.
{% if request.user.is_authenticated %}
<h3>{{ user.username }}님 안녕하세요!</h3>
<form action="{% url "accounts:logout" %}" method="POST">
{% csrf_token %}
<input type="submit" value="LOGOUT">
</form>
<a href="{% url "accounts:update" %}">회원정보수정</a>
<form action="{% url "accounts:delete" %}" method="POST">
{% csrf_token %}
<input type="submit" value='탈퇴하기'>
</form>
<hr>
{% else %}
<a href="{% url "accounts:login" %}">LOGIN</a>
<a href="{% url "accounts:signup" %}">SIGNUP</a>
{% endif %}
추가적으로 게시판의 글을 로그인한 사용자만 쓸 수 있도록 구현하고 싶을 때는
login_required라는 데코레이터를 사용한다.
※ 데코레이터란?
더보기
만약 어떤 함수에서 전/후처리가 필요하고, 그런 함수가 여러개라면 중복이 발생한다
그럴때 데코레이션을 이용해서 중복을 줄일 수 있다.
# 데코레이터함수
def my_deco(fun):
def wrapper():
print("전처리")
fun()
print("후처리")
return wrapper
@my_deco
def myfun():
print('myfun')
myfun()
을 실행하면
전처리
myfun
후처리
의 결과를 얻을 수 있다.
이런 데코레이터를 이용해서 로그인이 되는지 안되는지를 확인하여
특정 함수를 실행할지 말지를 정할 수 있다.
is_logined = False
def login_check(fun):
def wrapper():
if not is_logined:
print('로그인하고와라')
return
fun()
print("후처리")
return wrapper
@login_check
def myfunc():
print('메인')
myfunc()
로그인하고와라
다음과 같은 기능을 Django에서 login_required라는 이름의 데코레이터로 제공함
login_required
= 인증된 사용자에 대해서만 view 함수를 실행시키는 데코레이터
비인증 사용자의 경우, /accounts/login/ 주소로 redirect 시킴
사용하는 법은 매우 간단, 그냥 views.py에서 해당 함수 위에 @login_required만 추가
# articles/views.py
from django.contrib.auth.decorators import login_required
@login_required
# 이거만 추가해주면 된다
def create(request):
if request.method == 'POST':
form = ArticleForm(request.POST)
if form.is_valid():
article = form.save()
return redirect('articles:detail', article.pk)
.... 생략
'BackEnd > Django' 카테고리의 다른 글
[Django] 웹 크롤링(Web Crawling) (0) | 2023.10.13 |
---|---|
[Django] 로그인(5) 로그인 후, 페이지 다르게 출력하기 (0) | 2023.10.05 |
[Django] 로그인(3) 비밀번호 바꾸기 (0) | 2023.10.05 |
[Django] 로그인(2) 가입/탈퇴/수정 (0) | 2023.10.05 |
[Django] 로그인(1) 로그인, 로그아웃 (0) | 2023.10.04 |