9.다양한 응답의 함수 기반 뷰
View
1개의 HTTP 요청(Request)에 대해 -> 1개의 뷰가 호출(response)
- urls.py/urlpatterns 리스트에 매핑된 호출 가능한 객체 (함수 또는 클래스로 구현)
- View의 형태
- 함수 기반 뷰 (Function Based View) : 장고 뷰의 기본
- 호출 가능한 객체 (그 자체)
- 클래스 기반 뷰 (Class Based View) :
- 클래스.as_view()를 통해 호출 가능한 객체를 생성/리턴
- 함수 기반 뷰 (Function Based View) : 장고 뷰의 기본
View 호출시, 인자
HttpRequest 객체 및 URL Captured Values
- 1번째 인자 : HttpRequest 객체
- 현재 요청에 대한 모든 내역을 담고 있음
- 2번째 ~ 인자 : 현재 요청의 URL로부터 capture된 문자열들
- url/re_path를 통한 처리 -> str 타입으로 전달
- path를 통한 처리 -> 매핑된 Converter의 to_python에 맞게 변환된 인자로 전달
# app/urls.py
from . import views
from django.urls import path
urlpatterns = [
path('', views.post_list, name='post_list'),
# 정수 패턴이 나오면 pk란 이름을 넘기고, post_detail을 호출하겠다는 의미
path('<int:pk>/', views.post_detail), # <int:pk> 부분이 Converter
]
- app/views.py의 post_detail 부분
# app/views.py
def post_detail(request: HttpRequest, pk: int) -> HttpResponse:
return render(request, 'instagram/post_list.html', {})
View 호출에 대한 리턴
HttpResponse 객체
- 반드시 HttpResponse 객체를 리턴해야함
- django Middleware에서는 뷰에서 HttpResponse 객체를 리턴하길 기대함 -> 다른타입(None 포함)을 리턴하면 Middleware 오류 발생
-
django.shortcuts.render 함수는 템플릿 응답을 위한 shortcut 함수
- 파일like 객체 혹은 str/bytes 타입의 응답 지원
- str 문자열을 직접 utf8로 인코딩할 필요 없음
- django default 설정에서 str 문자열을 utf8로 인코딩해줌
- response = HttpResponse( 파일like객체, str객체, byte객체)
함수 기반 뷰 예시
# app/views.py
from django.shortcuts import render
from shop.models import Item
def item_list(requset):
qs = Item.object.all()
return render(request, 'shop/item_list.html', {
'item_list' : qs,
})
# app/urls.py
from django.urls import path
urlpatterns = [
path('items/', item_list, name='item_list'),
]
댓글남기기