티스토리 뷰
HTTP Status Code
웹서버는 적절한 상태코드로서 응답해야한다.
대표적 HTTP 응답 상태 코드
• 200 : 성공. 서버가 요청을 잘 처리했다. (OK) • 302 : 임시 URL로 이동했다. (Redirect) • 404 : 서버가 요청한 페이지를 찾을 수 없음. (Not Found) • 500 : 서버 오류 발생 (Server Error) |
"GET /blog/ HTTP/1.1" 200 100069
GET : GET방식으로 요청 (GET,POST)
/blog : 어떤 URL
HTTP/1.1 : 프로토콜
200 : 응답 코드
100069 : 응답 사이즈
200응답 예제
from django.http import HttpResponse, JsonResponse from django.shortcuts import render def view1(request): return HttpResponse('안녕하세요.')
def view2(request): return render(request, 'template.html') def view3(request): return JsonResponse({'hello': 'world'}) |
302응답 예제
from django.http import HttpResponseRedirect from django.shortcuts import redirect, resolve_url def view1(request): return HttpResponseRedirect('/blog/') # url로 이동 def view2(request): url = resolve_url('blog:post_list') # 후에 배울 URL Reverse 적용 return HttpResponseRedirect(url) def view3(request): return redirect('blog:post_list') |
404응답 예제
from django.http import Http404, HttpResponseNotFound from django.shortcuts import get_object_or_404 def view1(request): raise Http404 # Exception Class def view2(request): post = get_object_or_404(Post, id=100) # 없는 id에 접근할 경우 Http404 예외 발생 def view3(request): return HttpResponseNotFound() # 잘 쓰지 않는 방법 |
500응답 예제
# 이는 서버에서 요청 처리 중에 예기치못한 오류 (코드오류, 설정오류) 가 발생할 경우 IndexError, KeyError, django.db.models.ObjectDoesNotExist, ... 등 from blog.models import Post def view1(request): name = ['Tom', 'Steve'][100] def view2(request): post = Post.objects.get(id=100) # # 없는 id에 접근할 경우 Post.DoesNotExist예외가 발생 |
# blog/views.py def post_list(requests): 1/0 ## 500에러 발생 시킬 코드 삽입 "GET /blog/ HTTP/1.1" 500 74141 |
지정 Record가 없는 것은 서버오류가 아니다. (!= 500)
이는 명확히 404 응답으로 처리
from blog.models import Post def view1(request, id): try: post = Post.objects.get(id=id) except (Post.DoesNotExist, Post.MultipleObjectsReturned): raise Http404 def view2(request, id): try: post = Post.objects.filter(id=id)[0] except IndexError: raise Http404 |
> Post.objects.filter(id=252).delete() # id가 252인 게시글을 삭제
DoesNotExist at /blog/252/ 500 에러 발생 # 레코드가 없는것은 500에러가 아니라, 404로 처리하여야한다.
def post_detail(request, id): #try: # post = Post.objects.get(id=id) #except Post.DoesNotExist: # raise Http404 post = get_object_or_404(Post, id=id) return render(request, 'blog/post_detail.html',{ 'post':post, }) |
get_object_or_44를 사용하면 쿼리셋의 인자를 그대로 쓸 수 있다.
from django.shortcuts import get_object_or_404
def view1(request, id): post = get_object_or_404(Post, id=id) # 추천 |
"""본 내용은 AskDjango VOD, "장고 차근차근 시작하기" 강의내용을 참고하여 작성했습니다.(https://nomade.kr/)"""
'Python > * Django' 카테고리의 다른 글
10. Django 템플릿 상속 (0) | 2017.12.13 |
---|---|
9. Model Relationship Fields (2) | 2017.12.13 |
7. 모델을 통한 데이터 CRUD (0) | 2017.12.12 |
6. Django Admin (0) | 2017.12.12 |
5. Migration (0) | 2017.12.12 |