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
- vitepwa
- pwa적용하기
- SSAFYcial
- VITE
- 백준
- 알고리즘
- 데코레이터
- git
- queryset
- 싸피10기
- TypeScript
- SSAFY
- db
- 싸피
- 셀프넘버
- 14658
- unionfind
- QuerySetAPI
- Javascript
- Python
- js
- PWA
- 플로이드워셜
- SQL
- sqld
- 리액트
- 싸피셜
- react
- 머신러닝종류
- Django
Archives
- Today
- Total
Meme's IT
[Django] 로그인(5) 로그인 후, 페이지 다르게 출력하기 본문
데코레이터 @login_required를 이용해서 새로운 글을 쓰는 create를 막아뒀을 때,
create → 로그인을 하면 create로 다음 페이지가 이어져야하는데
막상 해보면 메인페이지인 index로 넘어가게 된다.
그렇다면, login을 하게되는 경로에 따라 이후 페이지를 다르게 출력하려면 어떻게 해야할까?
# 방법1. input을 이용하기
login.html파일에서 form안에 input을 추가해준다.
<!-- login.html -->
<form action="{% url "accounts:login" %}" method="POST">
{% csrf_token %}
<input type="hidden" name="next" value="{{request.GET.next}}">
{{ form.as_p }}
<input type="submit">
</form>
이때, input의 type은 hidden으로 해서 보이지 않게 함
input태그는 POST방식으로 넘어가기 때문에 views.py에서 함수를 입력할 때는 POST로 조회를 한다.
# views.py 수정
def login(request):
if request.method == 'POST':
form = AuthenticationForm(request, request.POST)
if form.is_valid():
auth_login(request, form.get_user())
next_url = request.POST.get('next') # POST로 조회
if next_url:
return redirect(next_url)
return redirect('articles:index')
# 방법2. form의 action이용하기
create → 로그인의 경로로 페이지를 넘어가면 다음과 같은 url을 가진다.
즉, 이후의 경로가 query형식으로 남는다.
이를 이용해서 form의 action을 이용해서 진행할 수 있다.
login.html을 다음과 같이 수정해준다.
<!-- login.html -->
<form action="{% url "accounts:login" %}?next={{request.GET.next}}" method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="submit">
</form>
이때는 GET방식으로 조회를 해줘야한다.
그러므로 views.py에서 수정해준다.
# views.py 수정
def login(request):
if request.method == 'POST':
form = AuthenticationForm(request, request.POST)
if form.is_valid():
auth_login(request, form.get_user())
next_url = request.GET.get('next') # GET으로 변경
if next_url:
return redirect(next_url)
두가지 방법을 이용하면,
그냥 로그인을 했을 때는 바로 메인페이지(index)로 넘어가고
create와 같이 login_required로 로그인을 진행했을 때는 막혔던 페이지로 넘어갈 수 있다.
'BackEnd > Django' 카테고리의 다른 글
[Django] N:M 프로필 만들기 (0) | 2023.10.17 |
---|---|
[Django] 웹 크롤링(Web Crawling) (0) | 2023.10.13 |
[Django] 로그인(4) 로그인 여부에 따른 출력 (0) | 2023.10.05 |
[Django] 로그인(3) 비밀번호 바꾸기 (0) | 2023.10.05 |
[Django] 로그인(2) 가입/탈퇴/수정 (0) | 2023.10.05 |