적절한 HTTP 상태코드로 응답하기
파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 강의를 듣고 정리한 글입니다.
HTTP 상태코드
- 웹서버는 적절한 상태코드로 응답할 의무가 있다.
- 장고의 HttpResponse 클래스마다 고유한 status_code가 할당되어 있다.
대표적인 상태코드
200번대: 성공
300번대: 요청을 마차기 위해 추가 조치가 필요하다.
400번대: 클라이언트측 오류 (잘못된 요청)
500번대: 서버측 오류
상태 코드 | 설명 |
---|---|
200 | 서버가 요청을 잘 처리했다. (OK) |
201 | 작성됨. 서버가 요청을 접수, 새 리소스를 작성 |
301 | 영구 이동. 요청한 페이지가 새 위치로 영구적으로 이동했다. |
302 | 임시 이동. 페이지가 현재 다른 위치에서 요청에 응답하고 있지만, 요청자는 향후 원래 위치를 계속 사용해야 한다. |
400 | 잘못된 요청 |
401 | 권한 없음. 인증이 필요하다. |
403(Forbidden) | 유저가 인증을 했지만 필요한 권한을 가지고 있지 않아서 요청을 거부 |
404 | 서버에서 요청한 리소스를 찾을 수 없다. |
405 | 허용되지 않는 방법. POST 방식만을 지원하는 뷰에 GET 요청을 하는 경우 |
500 | 서버 내부 오류 발생 |
응답 예시
200 응답
from django.http import HttpResponse, JsonResponse
from django.shortcuts import render
# HttpResponse 성공 응답
def view1(request):
return HttpResponse('Hello, Ask Company')
# render를 이용한 HttpResponse 성공 응답
def view2(request):
return render(request, 'template.html')
# jsonResponse 성공 응답
def view3(request):
return HttpResponse('Hello, Ask Company')
302 응답
from django.http import HttpResponseRedirect
from django.shortcuts import redirect, resolve_url
# 비 추천 방법
# HttpResponseRedirect를 직접 사용할 일은 적다.
# resolve_url함수로 URL Reverse를 활용하였다.
def view2(request):
url = resolve_url('shop:item_list')
return HttpResponseRedirect(url)
# 추천 방법
def view3(request):
# 내부적으로 resolve_url을 사용한다.
# 인자로 지정된 문자열이 url reverse에 실패할 경우, 그 문자열을 그대로 URL로 사용하여 redirect 시도
return redirect('shop:item_list')
404 응답
# 방법1 - 예외처리를 통해 오류 발생 시 404 응답
def view1(request):
try:
item = Item.objects.get(pk=100)
except Item.DeosNotExist:
raise Http404
# 생략
# 방법2 - 방법1과 같은 로직. 내부적으로 방법1처럼 raise Http404 활용
def view2(request):
item = get_object_or_404(Item, pk=100)
# 생략
500 응답
- 서버에서 미처 잡지 못한 오류가 발생하였을 때 발생.
IndexError
, KeyError
, django.db.models.ObjectDoesNotExist
등
- 모든 예외를 잡아서 통과시키는 것은 안티패턴이다. 중요한것은 에러를 발생시키지 않는게 아니라, 관리하는 것이다. 예기치 못한 에러는 500 응답을 주는게 당연하다.
Author And Source
이 문제에 관하여(적절한 HTTP 상태코드로 응답하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@joje/적절한-HTTP-상태코드로-응답하기
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
from django.http import HttpResponse, JsonResponse
from django.shortcuts import render
# HttpResponse 성공 응답
def view1(request):
return HttpResponse('Hello, Ask Company')
# render를 이용한 HttpResponse 성공 응답
def view2(request):
return render(request, 'template.html')
# jsonResponse 성공 응답
def view3(request):
return HttpResponse('Hello, Ask Company')
from django.http import HttpResponseRedirect
from django.shortcuts import redirect, resolve_url
# 비 추천 방법
# HttpResponseRedirect를 직접 사용할 일은 적다.
# resolve_url함수로 URL Reverse를 활용하였다.
def view2(request):
url = resolve_url('shop:item_list')
return HttpResponseRedirect(url)
# 추천 방법
def view3(request):
# 내부적으로 resolve_url을 사용한다.
# 인자로 지정된 문자열이 url reverse에 실패할 경우, 그 문자열을 그대로 URL로 사용하여 redirect 시도
return redirect('shop:item_list')
# 방법1 - 예외처리를 통해 오류 발생 시 404 응답
def view1(request):
try:
item = Item.objects.get(pk=100)
except Item.DeosNotExist:
raise Http404
# 생략
# 방법2 - 방법1과 같은 로직. 내부적으로 방법1처럼 raise Http404 활용
def view2(request):
item = get_object_or_404(Item, pk=100)
# 생략
IndexError
, KeyError
, django.db.models.ObjectDoesNotExist
등Author And Source
이 문제에 관하여(적절한 HTTP 상태코드로 응답하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@joje/적절한-HTTP-상태코드로-응답하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)