장고 뷰(View) 만들기
뷰(View)란?
장고에서 뷰(View)는 사용자의 요청을 처리하고 적절한 응답을 반환하는 함수나 클래스를 말합니다. 뷰는 웹 애플리케이션의 핵심 부분으로, URL과 연결되어 특정 작업을 처리합니다. 예를 들어, 사용자가 http://127.0.0.1:8000/post/1와 같은 URL로 접근하면, 해당 요청을 처리할 뷰가 실행되어 데이터베이스에서 필요한 정보를 조회하고 그 결과를 HTML, JSON 등의 형식으로 응답합니다. 뷰는 views.py 파일에 작성됩니다.
함수형 뷰와 클래스형 뷰
장고에서는 뷰를 함수형 뷰(Function-Based View, FBV)와 클래스형 뷰(Class-Based View, CBV)로 정의할 수 있습니다. 함수형 뷰는 간단한 형태로, 하나의 함수로 요청을 처리합니다. 예를 들어, def post_list(request):와 같이 작성할 수 있습니다. 클래스형 뷰는 더 구조화된 방식으로, 다양한 HTTP 메서드(GET, POST 등)를 처리할 수 있도록 지원합니다. 클래스형 뷰는 더 큰 프로젝트에서 코드 재사용성을 높이기 위해 유용합니다.
뷰에서 데이터 처리하기
뷰는 단순히 데이터를 반환하는 것만이 아니라, 데이터베이스에서 정보를 가져오고 처리하는 역할도 합니다. 예를 들어, Post.objects.all()을 사용해 데이터베이스에서 모든 게시글을 가져와 템플릿에 전달할 수 있습니다. 뷰에서 데이터를 처리하고 템플릿에 전달하려면, context라는 딕셔너리로 데이터를 감싸서 전달합니다. render(request, 'template.html', {'posts': posts})와 같이 사용하여 템플릿에서 데이터를 동적으로 표시할 수 있습니다.
뷰에서 템플릿 렌더링하기
뷰에서 템플릿을 렌더링하려면 render() 함수를 사용합니다. render() 함수는 요청 객체, 템플릿 이름, 그리고 템플릿에 전달할 데이터를 인자로 받습니다. 예를 들어, return render(request, 'post_list.html', {'posts': posts})처럼 사용하면, post_list.html 템플릿에 posts 데이터를 전달하여 HTML 페이지를 생성할 수 있습니다. 템플릿은 사용자에게 보여질 최종적인 웹 페이지를 정의하며, 동적으로 데이터를 표시할 수 있습니다.
뷰에서 HTTP 응답 반환하기
장고 뷰는 HttpResponse 객체를 반환하여 클라이언트에게 응답을 보냅니다. 예를 들어, HttpResponse("Hello, World!")는 단순한 텍스트 응답을 반환합니다. 하지만 대부분의 경우 HTML 템플릿을 렌더링하여 응답을 보냅니다. 또한, JsonResponse를 사용하면 JSON 형식으로 데이터를 반환할 수 있습니다. 예를 들어, JsonResponse({'message': 'Success'})는 JSON 형식의 응답을 클라이언트에게 전달합니다.