>백엔드 개발 >파이썬 튜토리얼 >Django 클래스 기반 뷰가 쉬워졌습니다.

Django 클래스 기반 뷰가 쉬워졌습니다.

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-12 14:13:30509검색

Django Class Based View made easy

우리 모두 알고 있듯이 django는 웹 애플리케이션 개발 시 디자인에 MVT(model-view-template)를 사용합니다.

뷰 자체는 요청을 받고 응답을 반환하는 호출 가능 항목입니다. Django는 클래스 기반 뷰라는 것을 제공하므로 개발자는 클래스 기반 접근 방식을 사용하거나 OOP 접근 방식을 사용하여 뷰를 작성할 수 있으므로 이는 단순한 기능 이상의 것입니다. 이 클래스 기반 뷰는 뷰를 구조화하고 상속 및 믹스인을 통해 재사용할 수 있도록 설계되었습니다.

django 문서에 잘 설명되어 있듯이 함수 기반 보기의 문제점 중 하나는 일부 구성 옵션 이상으로 확장하거나 사용자 정의할 수 있는 방법이 없어 많은 실제 애플리케이션에서의 유용성이 제한된다는 것입니다.

django의 기본 클래스와 믹스인 툴킷은 유연성을 극대화하도록 설계되었습니다. View 클래스 상속을 사용하여 django에서 가장 기본적인 클래스 기반 뷰를 어떻게 사용할 수 있는지 살펴보고 이를 함수 기반 뷰와 비교해 보겠습니다.

#views.py using View class inheritance
from django.views import View
from django.http import HttpResponse, HttpRequest

class IndexView(View):
    def get(self, request: HttpRequest):
        # imagine 10 line of view logic here
        return HttpResponse("Hello world from indexview")

    def post(self, request: HttpRequest):
        # imagine 10 line of view logic here
        return HttpResponse("Hello world from indexview in post method")

#views.py function based view
from django.http import HttpResponse, HttpRequest

def index(request: HttpRequest):
    if request.method == "GET":
        # imagine 10 line of view logic here
        return HttpResponse("Hello world from index funcion view")
    elif request.method == "POST":
        # imagine 10 line of view logic here
        return HttpResponse("Hello world from index funcion view in post method")

위를 보면 클래스 기반 뷰를 사용하면 단일 뷰 함수 내에서 코드를 조건부로 분기하는 대신 다양한 클래스 인스턴스 메서드를 사용하여 다양한 HTTP 요청 메서드에 응답할 수 있습니다. 이제 위의 각 뷰에서 각 메서드에 10줄의 논리를 추가했다고 상상해 보세요. 어느 것이 더 알아보기 쉬운지 알 수 있을 것입니다.

클래스 기반 뷰를 URL 구성에 등록하려면 기본적으로 클래스 뷰를 호출 가능한 함수로 변환하는 as_view() 클래스 메서드를 호출해야 합니다. 이 변환된 함수는 setup()을 호출하여 해당 속성을 초기화한 다음 사용자가 어떤 메서드(GET, POST 또는 기타 메서드)를 가지고 있는지 확인하기 위해 dispatch()를 호출하고 요청 메서드를 클래스 기반 뷰가 원래 가지고 있는 해당 일치 메서드에 연결합니다.

#urls.py

from django.urls import path
from myapp.views import IndexView, index

urlpatterns = [
    path("", IndexView.as_view(), name=IndexView.__name__), 
    path("index/", index, name=index.__name__),

]

클래스 기반 뷰는 템플릿을 렌더링하는 render() 함수와 같은 django의 모든 http shortcut도 지원합니다. 여기에는 django 메시지 프레임워크와 협력하고 렌더링 바로가기를 사용하는 django cbv의 수정된 예가 있습니다

class IndexView(View):
    def get(self, request: HttpRequest):
        # imagine 10 line of view logic here
        return render(request, "GEtindex.html")

    def post(self, request: HttpRequest):
        # imagine 10 line of view logic here
        messages.add_message(request, messages.INFO, "POST Success") #add display success message here by django messages framework
        return render(request, "POSTindex.html")

전체 django 클래스 기반 뷰를 사용하면 개발자가 뷰 로직을 더 잘 이해할 수 있습니다. 뷰 로직이 더 복잡할수록 함수 기반 뷰만 사용하면 읽기가 더 어려울 것이라고 확신합니다(무엇을 확인하기에는 if 문이 너무 많습니다). 메서드는 예를 들어 사용자가 사용하고 있으며 확장하기 어려운 반면 django cbv는 뷰 논리를 get 및 post 메서드와 같은 여러 메서드로 분리하도록 설계되었습니다. 원한다면 상속에서 다시 사용할 수 있지만 클래스에 상속이 많을수록 추상화로 인해 읽기가 더 어려워질 것이라고 주장할 수 있습니다.

django 문서의 클래스 기반 보기에 대한 자세한 내용은 여기, 여기, 여기에서 확인할 수 있습니다

또한 django 클래스 기반 보기에 초점을 맞춘 좋은 대체 문서는 ccbv.co.uk입니다. <- 저는 이 웹사이트를 사용하여 어떤 보기 템플릿 논리를 빠르게 사용할 수 있는지 알고 있습니다!

위 내용은 Django 클래스 기반 뷰가 쉬워졌습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:더블룬다음 기사:더블룬