뷰 시작하기
프로그래밍에서 뷰는 일반적으로 사용자에게 정보를 표시하는 구성 요소입니다. 뷰가 수행하는 작업은 데이터 로드에 관한 책임을 포함하여 프레임워크 및 규칙에 따라 달라질 수 있습니다.
Django에서 뷰는 일반적으로 다음을 담당합니다.
- 사용자 요청의 유효성을 검사하는 중입니다.
- 적절한 데이터를 로드하거나 수정합니다.
- 사용자에게 정보를 포함하는 HTML 템플릿 반환.
뷰를 수동으로 만들고 적절한 URLconfs를 구성하여 탐색을 시작하겠습니다. URLconf는 일치시킬 패턴, 호출할 함수 및 선택적으로 이름을 나타내는 경로 목록입니다. 이후 단원에서는 Django가 직접 작성한 코드를 자동으로 처리할 수 있는 방법을 알아봅니다.
보기 만들기
Django에서 처음부터 뷰를 만들려면 일반적으로 함수를 만듭니다. 함수는 일반적으로 다음과 같은 적절한 코드를 포함합니다.
- 사용자가 요청한 작업을 수행합니다.
- 사용자에게 표할 적절한 데이터가 포함된 템플릿을 반환합니다.
뷰 함수는 항상 사용자의 요청을 나타내는 request
라는 매개 변수를 하나 이상 사용합니다. URL 사용자로부터 항목 이름 또는 ID 같은 추가 정보가 필요한 경우 필요에 따라 더 많은 매개 변수를 제공할 수 있습니다. 경로를 생성할 때 등록하게 되는데, 이후 단원에서 설명하겠습니다.
데이터 로드 중
Django ORM을 사용하여 등록된 데이터베이스에서 필요한 데이터를 로드할 수 있습니다.
빌드중인 프로젝트에는 Shelter
및 Dog
라는 두 개의 모델이 있습니다. 만든 모델을 사용하여 모든 개체를 로드하거나 다른 쿼리를 수행할 수 있습니다. 예를 들어 모든 보호소를 로드하려면 Shelter.objects.all()
을 사용합니다. Shelter.objects.get(pk=1)
을 사용하여 보호소를 로드할 수 있습니다.
참고
pk
는 기본 키를 위한 바로 가기입니다. id
를 사용하여 동일한 결과를 얻을 수 있지만 pk
를 사용하면 기본 키를 나타내는 속성을 다른 이름으로 변경한 경우 명령이 작동하는지 확인할 수 있습니다.
404 오류
웹 애플리케이션의 404 오류는 "찾을 수 없음"을 의미합니다. 모범 사례로, 존재하지 않는 개체에 관한 요청이 있을 때마다 404를 반환해야 합니다.
Django는 데이터를 로드하는 데 사용할 수 있는 바로 가기를 제공합니다.
get_object_or_404
및get_list_or_404
: 기본 키를 사용하여 개체를 로드하거나 개체를 찾을 수 없는 경우 사용자에게 404를 반환합니다.get_list_or_404
: 필터 매개 변수를 허용한다는 점을 제외하고 다른 바로 가기와 동일한 작업을 수행합니다.
연습에서 get_object_or_404
를 사용합니다.
템플릿 렌더링
Django의 템플릿 엔진은 작성하는 HTML 템플릿을 가져와서 제공된 데이터와 결합하고 브라우저용 HTML을 내보냅니다. 이 작업을 수행하는 도우미 함수는 render
입니다.
render
함수에는 요청을 나타내는 개체, 이전에 강조 표시한 request
매개 변수가 필요합니다. 템플릿의 이름(일반적으로 템플릿 폴더에 상주할 HTML 파일)도 전달합니다.
템플릿에 데이터를 전달하려면 render
에 context
사전 개체를 제공합니다. context
개체에는 키/값 쌍 세트가 포함되어 있으며 각 키는 템플릿에서 변수가 됩니다.
예제
모든 보호소를 표시하는 뷰를 만들려면 다음 코드를 사용할 수 있습니다.
def shelter_list(request):
shelters = Shelter.objects.all()
context = { 'shelters': shelters }
return render(request, 'shelter_list.html', context)
경로 등록하기
거의 모든 웹 프레임워크는 경로를 사용하여 사용자 요청을 처리합니다. 경로는 도메인 이름과 쿼리 문자열(물음표 뒤에 오는) 앞에서 URL의 부분을 함수 호출로 변환합니다.
www.contoso.com/shelters
에 관한 호출은 모든 보호소를 나열하는 함수를 호출할 수 있지만 www.contoso.com/shelters/1
는 ID가 1인 보호소를 표시하는 함수를 호출할 수 있습니다. URLconf를 만들어 Django에 경로를 등록합니다.
Django 규칙인 views
라는 모듈이 있다고 가정해 보겠습니다. 경로가 지정되지 않은 색인 트래픽(예:www.contoso.com
)을 index
라는 views
의 함수로 라우트하고 다음 경로를 사용하여 index
라는 이름을 지정할 수 있습니다.
path('', views.index, 'index')
특정 요청에 관한 가상 폴더를 만들 수도 있습니다. 예를 들어 누군가가 /shelters을 요청하는 경우 모든 대피소를 나열하려면 다음 명령을 사용할 수 있습니다.
path('shelters', views.shelter_list, 'shelter_list')
URL 매개 변수
URL의 일부로 애플리케이션에 매개 변수(예: ID 또는 이름)를 전달하는 일반적인 방법입니다. 이러한 값은 변경되므로 경로에 하드 코딩하지 않으려고 합니다. Django에서는 특수 구문을 사용하여 매개 변수를 지정할 수 있습니다. 이 구문에서 정수 및 이름과 같이 예상되는 데이터의 형식을 나타낼 수 있습니다.
예를 들어 다른 사용자가 ID로 특정 보호소를 요청하는 경로를 만들기 위해 integer
형식의 매개 변수를 사용할 수 있습니다. (그 이유는 기본 키가 정수이기 때문입니다.) 그런 다음 변수에 사용하려는 이름을 제공할 수 있으며, 이 이름을 뷰 함수에 매개 변수로 전달합니다. 이 매개 변수를 식별하는 구문은 <int:pk>
입니다. 형식 선언, 콜론 및 변수 이름을 확인합니다.
전체 경로는 다음과 같습니다.
path('shelter/<int:pk>', views.shelter_detail, name='shelter_detail')
연결된 뷰 함수의 서명은 다음과 같습니다.
def shelter_detail(request, pk):
# code
경로 서명의 pk
부분은 shelter_detail
에 매개 변수로 전달되며, 마치 일반 Python 함수처럼 호출됩니다.