이 글은 Django의 FBV와 CBV에 대한 예시 설명을 제공합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
FBV: 요청을 처리하기 위해 뷰의 함수를 사용하는 함수 기반 뷰입니다.
urlpatterns = [ path('index/', views.index), ] # 视图函数里 def index(request): return render(request,"index.html")
CBV: 요청을 처리하기 위해 뷰의 클래스를 사용하는 클래스 기본 뷰입니다.
urlpatterns = [ path("login/",views.LoginView.as_view()) ] # 视图函数里 class LoginView(View): def dispatch(self, request, *args, **kwargs): """ 重写dispatch方法, 可以放一些专属于LoginView的操作 """ return ... def get(self,request): return HttpResponse("OK") def post(self,request): return HttpResponse("OK") def put(self,request): return HttpResponse("OK") def delete(self,request): return HttpResponse("OK")
CBV의 소스 코드 분석:
Django의 URL은 클래스가 아닌 호출 가능한 함수에 요청을 할당합니다. 이 문제에 대응하여 클래스 기반 뷰(즉, Django의 기본 View 클래스)에서는 as_view()라는 정적 메서드(즉, 클래스 메서드)를 제공하며 이 메서드를 호출하면 self = cls(**를 통해 클래스가 생성됩니다. initkwargs) 인스턴스를 호출한 다음 해당 인스턴스를 통해 dispatch() 메서드를 호출합니다. dispatch() 메서드는 해당 메서드를 호출하여 다양한 메서드에 따라 요청(예: get(), post() 등)을 처리합니다. 요청. 이 시점에서 이러한 메서드는 요청을 받고 응답을 다시 받아야 하는 함수 기반 뷰와 거의 동일합니다. 메서드가 정의되지 않은 경우 HttpResponseNotAllowed 예외가 발생합니다.
CBV 모델이 있는 이유는 무엇인가요?
파이썬의 중요한 특징은 객체 지향입니다. 그리고 cbv는 Python의 객체 지향 특성을 더 잘 반영할 수 있습니다. cbv는 클래스를 통해 뷰 메소드를 구현합니다. 함수에 비해 클래스는 다형성의 특수성(다형성: 동일한 작업을 다른 유형의 객체에 사용할 수 있음)을 더 잘 활용할 수 있으므로 매크로 수준에서 프로젝트 내의 보다 일반적인 기능을 추상화하는 것이 더 쉽습니다.
위 내용은 Django의 FBV 및 CBV에 대한 예제 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!