1 분 소요

대표적인 상태 코드

  • 200번대 : 성공
    • 200 : 서버가 요청을 잘 처리했다. -> OK
    • 201 : 작성됨. 서버가 요청을 접수하고, 새 리소스를 작성했다.
  • 300번대 : 요청을 마치기 위해, 추가 조치가 필요하다.
    • 301 : 영구 이동, 요청한 페이지가 새 위치로 영구적으로 이동했다.
    • 302 : 임시 이동, 페이지가 현재 다른 위치에서 요청에 응답하고 있지만, 요청자는 향후 원래 위치를 계속 사용해야 한다.
  • 400번대 : 클라이언트측 오류
    • 400 : 잘못된 요청.
    • 401 : 권한없음.
    • 403(Forbidden) : 필요한 권한을 가지고 있지 않아서, 요청을 거부
    • 404 : 서버에서 요청한 리소스를 찾을 수 없다.
    • 405 : 허용되지 않는 방법. POST 방식만을 지원하는 뷰에 GET 요청을 할 경우
  • 500번대 : 서버측 오류
    • 500 : 서버 내부

200 응답하는 몇 가지 예

from django.http import HttpResponse, JsonResponse
from django.shortcuts import render

def view1(request):
    return HttpResponse('Hello, Ask Company')

def view2(request):
    return render(request, 'template.html')

def view3(request):
    return JsonResponse({'hello': 'Ask Company'})

302 응답하는 몇 가지 예

from django.http import HttpResponseRedirect
from django.shortcuts import redirect, resolve_url

def view1(request):
    return HttpResponseRedirect('/shop/')

def view2(request):
    url = resolve_url('shop:item_list') # 후에 배울 URL Reverse 적용
    return HttpResponseRedirect(url)

def view3(request):
    # 내부적으로 resolve_url 사용
    # 인자로 지정된 문자열이 url reverse에 실패할 경우,
    # 그 문자열을 그대로 URL로 사용하여, redirect 시도
    return redirect('shop:item_list')

404 응답하는 몇 가지 예

from django.http import Http404, HttpResponseNotFound
from django.shortcuts import get_object_or_404
from shop.models import Item

def view1(request):
    try:
        item = Item.objects.get(pk=100)
    except Item.DoesNotExist:
        raise Http404
    # 생략

def view2(request):
    item = get_object_or_404(Item, pk=100) # 내부에서 raise Http404
    # 생략

def view3(request):
    try:
        item = Item.objects.get(pk=100)
    except Item.DoesNotExist:
        return HttpResponseNotFound() # 잘 쓰지 않는 방법
    # 생략

500 응답하는 몇 가지 예

뷰에서 요청 처리 중에, 뷰에서 미처 잡지못한 오류가 발생했을 경우

  • IndexError, KeyError, django.db.models.ObjectDoesNotExist 등
from shop.models	import Item

def view1(request):
    # IndexError
    name = ['Tom', 'Steve'][100]

    # 지정 조건의 Item	레코드가 없을 때,	Item.DoesNotExist	예외
    # 지정 조건의 Item	레코드가 2개 이상 있을 때,	Item.MultipleObjectsReturned	예외
    item = Item.objects.get(pk=100)

다양한 HttpResponse 서브 클래스

  • 지정 상태코드의 응답이 필요할 때

HttpResponseRedirect : 상태코드 302

HttpResponsePermanentRedirect : 상태코드 301 (영구 이동)

HttpResponseNotModified : 상태코드 304

HttpResponseBadRequest : 상태코드 400

HttpResponseNotFound : 상태코드 404

HttpResponseForbidden : 상태코드 403

HttpResponseNotAllowed : 상태코드 405

HttpResponseGone : 상태코드 410

HttpResponseServerError : 상태코드 500

댓글남기기