티스토리 뷰
Django
[Django Basic 06] HttpResponse VS HttpResponseRedirect / render VS redirect
Liiot 2020. 1. 30. 09:501. HttpResponse VS HttpResponseRedirect
HttpResponse
HttpResponse()
: HttpResponse 객체를 반환
- HTTP코드가 200이고 생성자로 전달된 컨텐츠를 포함한
HttpResponse
객체 생성 - 보통 작은 response에서만 사용 (ajax로 받은 데이터나, 작은 number 등)
from django.http import HttpResponse
def index(request):
return HttpResponse("What do you do in your free time?")
HttpResponseRedirect
HttpResponseRedirect()
: 주어진 url로 redirection
- HTTP코드가 302(Found/Moved temporarily)인
HttpResponse
객체 생성 - 다른 페이지로 redirect할 때 사용 ex) form POST전송 성공 이후
from django.http import HttpResponseRedirect
def index(request):
return HttpResponseRedirect('/index/')
2. render VS redirect
아래 두 함수는 Django에서 제공하는 shortcuts 함수이다.
render
render
(request, template_name, context=None, content_type=None, status=None, using=None)
: 주어진 template을 context와 결합하고 rendering된 HttpResponse 객체를 반환
- template 파일이 view에서 넘긴 데이터로 표현되어짐
원래 template에 context를 전달하려면 다음과 같이 template파일을 따로 불러와야 했다.
from django.http import HttpResponse
from django.template import loader
def index(request):
template = loader.get_template('index.html')
context = {
'question': 'What do you do in your free time?',
}
return HttpResponse(template.render(context, request))
그러나 render()
를 사용하면 다음과 같이 훨씬 간단하게 표현된다.
from django.shortcuts import render
def index(request):
return render(request, 'index.html', {'question': 'What do you do in your free time?',})
redirect
redirect
(to, args, permanent=False, kwargs)
: 전달받은 URL로 HttpResponseRedirect를 반환. 즉, 해당 URL로 이동
- 이동하는 페이지에 데이터는 전달할 수 없음
- 인자로 사용되는 URL은 절대 URL, 상대 URL 모두 가능
- 보통 urls.py에서 정의한 각 url pattern들의 name을 활용하여 사용
원래 url name을 사용하여 url을 재구성하려면 다음과 같이 reverse
함수를 따로 불러와야 했다.
from django.http import HttpResponseRedirect
def index(request):
return HttpResponseRedirect(reverse('blog:detail', args=[1]))
return HttpResponseRedirect(reverse('blog:detail', kwargs={'id':1}))
그러나 redirect
를 사용하면 좀 더 간단하게 표현할 수 있다.
from django.shortcuts import redirect
return redirect('blog:detail', 1) #내부적으로 resolve_url() 사용
return redirect('/blog/detail/1/') #상대 url
return redirect('http://example.com/blog/detail/1') #절대 url
참고 자료
'Django' 카테고리의 다른 글
[Django Basic 08] URL Reverse (0) | 2020.02.09 |
---|---|
[Django Basic 07] settings.py에서 SECRET_KEY 분리하기 (0) | 2020.02.07 |
[Django Basic 05] URLconf 2계층으로 나누기 (0) | 2020.01.23 |
[Django App 2-3] settings.py에서 MySQL 서버 연결 정보 분리하기 (0) | 2020.01.19 |
[Django Basic 04] Messages Framework (0) | 2020.01.16 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Django application
- Redis Cache
- Django 회원 정보 수정
- Django 컬렉션
- 북마크 어플리케이션
- Django 어플리케이션
- 서점 어플리케이션
- Django 좋아요
- query parameter
- MySQL
- 장고
- Django 검색
- Django 북마크
- Django 업로드
- python
- java
- Redis
- Django User
- Django
- Django 팔로우
- Django 회원가입
- Django Instagram
- Django 로그인
- Django 해시태그
- Django 비밀번호 수정
- Django 로그아웃
- Django 프로젝트 생성
- Django 인스타그램
- Django 댓글
- 파이썬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함