뷰 시작하기

완료됨

프로그래밍에서 는 일반적으로 사용자에게 정보를 표시하는 구성 요소입니다. 뷰가 수행하는 작업은 데이터 로드에 관한 책임을 포함하여 프레임워크 및 규칙에 따라 달라질 수 있습니다.

Django에서 뷰는 일반적으로 다음을 담당합니다.

  • 사용자 요청의 유효성을 검사하는 중입니다.
  • 적절한 데이터를 로드하거나 수정합니다.
  • 사용자에게 정보를 포함하는 HTML 템플릿 반환.

뷰를 수동으로 만들고 적절한 URLconfs를 구성하여 탐색을 시작하겠습니다. URLconf는 일치시킬 패턴, 호출할 함수 및 선택적으로 이름을 나타내는 경로 목록입니다. 이후 단원에서는 Django가 직접 작성한 코드를 자동으로 처리할 수 있는 방법을 알아봅니다.

보기 만들기

Django에서 처음부터 뷰를 만들려면 일반적으로 함수를 만듭니다. 함수는 일반적으로 다음과 같은 적절한 코드를 포함합니다.

  • 사용자가 요청한 작업을 수행합니다.
  • 사용자에게 표할 적절한 데이터가 포함된 템플릿을 반환합니다.

뷰 함수는 항상 사용자의 요청을 나타내는 request라는 매개 변수를 하나 이상 사용합니다. URL 사용자로부터 항목 이름 또는 ID 같은 추가 정보가 필요한 경우 필요에 따라 더 많은 매개 변수를 제공할 수 있습니다. 경로를 생성할 때 등록하게 되는데, 이후 단원에서 설명하겠습니다.

데이터 로드 중

Django ORM을 사용하여 등록된 데이터베이스에서 필요한 데이터를 로드할 수 있습니다.

빌드중인 프로젝트에는 ShelterDog라는 두 개의 모델이 있습니다. 만든 모델을 사용하여 모든 개체를 로드하거나 다른 쿼리를 수행할 수 있습니다. 예를 들어 모든 보호소를 로드하려면 Shelter.objects.all()을 사용합니다. Shelter.objects.get(pk=1)을 사용하여 보호소를 로드할 수 있습니다.

참고

pk는 기본 키를 위한 바로 가기입니다. id를 사용하여 동일한 결과를 얻을 수 있지만 pk를 사용하면 기본 키를 나타내는 속성을 다른 이름으로 변경한 경우 명령이 작동하는지 확인할 수 있습니다.

404 오류

웹 애플리케이션의 404 오류는 "찾을 수 없음"을 의미합니다. 모범 사례로, 존재하지 않는 개체에 관한 요청이 있을 때마다 404를 반환해야 합니다.

Django는 데이터를 로드하는 데 사용할 수 있는 바로 가기를 제공합니다.

  • get_object_or_404get_list_or_404 : 기본 키를 사용하여 개체를 로드하거나 개체를 찾을 수 없는 경우 사용자에게 404를 반환합니다.
  • get_list_or_404: 필터 매개 변수를 허용한다는 점을 제외하고 다른 바로 가기와 동일한 작업을 수행합니다.

연습에서 get_object_or_404를 사용합니다.

템플릿 렌더링

Django의 템플릿 엔진은 작성하는 HTML 템플릿을 가져와서 제공된 데이터와 결합하고 브라우저용 HTML을 내보냅니다. 이 작업을 수행하는 도우미 함수는 render입니다.

render 함수에는 요청을 나타내는 개체, 이전에 강조 표시한 request 매개 변수가 필요합니다. 템플릿의 이름(일반적으로 템플릿 폴더에 상주할 HTML 파일)도 전달합니다.

템플릿에 데이터를 전달하려면 rendercontext 사전 개체를 제공합니다. 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 함수처럼 호출됩니다.