(Django) Http 404 에러의 처리

Kepler·2020년 2월 4일
0

Django

목록 보기
4/12

@ views.py

  • 유저가 request한 정보가 데이터베이스에 없을때, 404에러를 리턴한다.
  • 크게 두가지 방법으로 처리할 수 있다.

1. Raising a 404 using try/except and Http404

  • try: 유저가 요청한 객체가 DB에 있는지 확인하는 코드
  • except .. raise: 객체가 없는 경우의 처리 (DoesNotExist) .. 보여줄 에러 메세지
  • return: 에러가 없는 경우의 처리
@ views.py

from django.http import Http404     # Http404를 import
from django.shortcuts import render

from .models import Question
# ...
def detail(request, question_id):
    try:
        question = Question.objects.get(pk=question_id)  #check if question_id that user sends is valid
    except Question.DoesNotExist: # if not, send DoesNotExist
        raise Http404("Question does not exist") #what specific message to show
    return render(request, 'polls/detail.html', {'question': question}) # write out the dictionary (variable is fine too)

2. Shortcut: get_object_or_404

  • django.shortcuts 모듈에서 get_object_or_404를 import하여 사용한다.
  • 2가지 parameter를 필수로 받는다 (klass, **kwargs)
    + parameter1 = MODEL class
    + parameter2 = Lookup, get(), filter()가 받는 포맷과 맞추어야함 (ex: pk= )
@ views.py

from django.shortcuts import get_object_or_404, render 
from .models import Question
# ...

def detail(request, question_id):
#이 한줄의 코드가 1번의 try/except를 replace한다.
    question = get_object_or_404(Question, pk=question_id) 
    return render(request, 'polls/detail.html', {'question': question})
profile
🔰

0개의 댓글