[Django Basic 06] HttpResponse VS HttpResponseRedirect / render VS redirect
1. 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
참고 자료
첫 번째 장고 앱 작성하기, part 3 | Django 문서 | Django
Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate
docs.djangoproject.com
[Django] HttpResponse VS HttpResponseRedirect
의문 redirect reverse redirect(reverse(‘password-set’)) return HttpResponseRedirect(reverse(‘news-year-archive’, args=(year,))) render render_to_response 차이가 뭐지 redirect(‘welc…
milooy.wordpress.com