11. function based views 이해 - chohankyun/python-django-study GitHub Wiki

##function based views
간단한 파이썬 함수 형태이며, web request, response 를 처리

python 함수
동작 : 현재시간을 구해서 리턴한다.
파라미터 : 없음
바디 : 현재시간 구함
리턴 : 현재시간 문자열

import datetime  

def current_datetime():  
    now = datetime.datetime.now()  
    return str(now)  

django 함수 뷰
동작 : 현재 시간을 구해서 리턴한다.
파라미터 : request
바디 : 1. 현재시간 구함
2. 현재시간에 html 테그 추가
리턴 : HttpResponse 형태의 현재시간

from django.http import HttpResponse  
import datetime  

def current_datetime(request):  
    now = datetime.datetime.now()  
    html = "<html><body>It is now %s.</body></html>" % now  
    return HttpResponse(html)  

둘간의 차이는 결국 request(HttpRequest), HttpResponse => web

request 파라미터
HttpRequest 객채는 http 요청에 대한 여러가지 정보를 담고 있음
html 화면으로 부터 받은 값, 요청 메소드(get,post,etc..) 등

HttpResponse
HttpResponse 객체는 http 응답에 대한 여러가지 정보를 담고 있음
http head, http status code, etc..

리턴 값

HttpResponse  
HttpResponseNotFound  

status code 에 대한 특별한 리턴 객체는 존재하지 않음

Http404 exception 기본적으로 http404 exception 이 발생하면
django 가 잡아서 django 표준 에러 화면을 리턴한다.

Http404 exception 커스터 마이징
404 에러가 발생했을때 개발자가 원하는 페이지를 호출 하고 싶으면

1. templates 의 최상위 폴더에 404.html 을 만든다.   
2. settings.py 에 있는 DEBUG = False 로 설정한다.  

404 에러 발생시 표준에러 페이지가 아닌 개발자가 만든
404.html 이 호출된다.

에러 뷰 커스터마이징
에러가 발생했을때 개발자 원하는대로 처리 할수 있도록
원하는 뷰를 호출 하도록 만단다
urls.py 에 에러 핸들러를 선언한다.

urlpatterns = patterns(  
    '',  
    url(r'^admin/', include(admin.site.urls)),  
)  

handler404 = 'mysite.views.my_custom_page_not_found_view'  
handler500 = 'mysite.views.my_custom_error_view'  
handler403 = 'mysite.views.my_custom_permission_denied_view'  
handler400 = 'mysite.views.my_custom_bad_request_view'  

function based views 호출 방법
간단하다, 그냥 urls.py 에서 원하는 뷰를 호출한다.
경로를 "." 으로 연결해서 호출한다.
예) mysite.views.current_datetime
=>mysite app(app name) 의 views 모듈의 current_datetime 함수

urlpatterns = patterns(  
    '',  
    url(r'^admin/', include(admin.site.urls)),  
    url(r'^mysite/current_datetime/$', mysite.views.current_datetime),  
)  

Function-based generic views 기본 객체

  • HttpRequest
  • HttpResponse

사실 function based views 만들어 본 적이 없음

⚠️ **GitHub.com Fallback** ⚠️