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 만들어 본 적이 없음