Django 대 모델 뷰 컨트롤러 [닫힌]


110

누군가 Django와 Model View Controller 패턴의 차이점을 설명 할 수 있습니까?

기능적으로, 이러한 차이점에서 무엇을 기대할 수 있습니까? 즉, Django를 Ruby on Rails와 비교하여 다르게 작동하는 것은 무엇입니까?


2
"the"Model View Controller라고 할 때 일반적인 패턴을 의미합니까, 아니면 특정 구현 (예 : Ruby on Rails)을 의미합니까?
Paul D. Waite 2011

33
이 질문은 '건설적이지 않음'으로 간주되지 않으며 '토론, 논증, 여론 조사 또는 확장 된 토론'없이 직접적인 답변을 제공합니다. 그럼 왜 닫을까요?
사용자

6
건설적이지 않습니까? 그래서 슈퍼 모드가 다시 공격합니다.
Amit Tripathi

4
현재까지 거의 24,000 명의 사람들이이 질문이 건설적이라고 생각했습니다. 나 자신을 포함해서.
frozenjim

3
2017 년 현재이 질문은 여전히 ​​건설적입니다
Leonardo Pessoa

답변:


140

Django Book 에 따르면 Django 는 MVC 프레임 워크라고 할만큼 충분히 MVC 패턴을 따릅니다.

Django는 컨트롤러가 프레임 워크 자체에서 처리되고 대부분의 흥분이 모델, 템플릿 및 뷰에서 발생하기 때문에 MTV 프레임 워크라고 불 렸습니다.

MTV / MVC에 대한 자세한 내용은 여기에서 읽을 수 있습니다.

MTV (또는 MVC) 개발 패턴

Ruby on Rails와 같은 다른 MVC 웹 개발 프레임 워크에 익숙하다면 Django 뷰를 컨트롤러로 , Django 템플릿을 뷰로 간주 할 수 있습니다 .

이것은 MVC의 다른 해석으로 인한 불행한 혼란입니다.

Django의 MVC 해석에서 는 사용자에게 제공되는 데이터를 설명합니다. 데이터가 어떻게 보이는지뿐만 아니라 어떤 데이터가 표시되는지가 중요합니다.

대조적으로, Ruby on Rails 및 유사한 프레임 워크는 컨트롤러의 작업에 사용자에게 표시되는 데이터를 결정하는 것이 포함되지만보기는 데이터가 표시되는 것이 아니라 데이터가 어떻게 보이는지 엄격하게 결정됩니다.


6
훌륭한 답변에 감사드립니다. Rails에서 Django로 이동하면 가장 실망스러운 점 중 하나에 대한 답을 얻을 수 있습니다. django는 컨트롤러 코드를 views.py!라는 파일에 넣는 이유는 무엇입니까?
dgmdan 2013-07-27

@dgmdan 기본 규칙 일 뿐이며 원하는 이름을 선택할 수 있습니다. 하지만 그것은 이상한 :) 보인다 동의
파올로 모레티

1
차라리 views.py를 뷰 레이어로 남겨두고 Django의 혼동을 피하기 위해 컨트롤러 패키지에 컨트롤러 클래스 집합을 만듭니다.
stanleyxu2005

5
@dgmda : "컨트롤러"라는 개념은 웹앱에서 잘못된 이름입니다. MVC는 HTTP의 Stateless REQUEST / RESPONSE 모델에만 맞지 않는 이벤트 중심 프레임 워크입니다. 애초에 MVC라고 부르면 안됩니다. 거의 모든 웹앱은 MVC가 아니지만 일반적으로 뷰라고하는 모델과 함수 또는 클래스를 사용합니다. 그러면 뷰는 HTML 렌더링을 템플릿에 위임 할 수 있지만 반드시 그럴 필요는 없습니다. 그래서 실제로 컨트롤러가 없습니다.
Lennart Regebro 2013

2
HTTP와 같은 상태 비 저장 모델에는 컨트롤러와 웹 앱용 MVC 모델이 없어야한다는 Lennart Regebro의 개념을 뒷받침합니다.
Hussam

23

Django FAQ 자체는 시작하기에 적절한 곳입니다.

MVC의 해석에서 "뷰"는 사용자에게 제공되는 데이터를 설명합니다. 데이터가 어떻게 보이는지가 아니라 어떤 데이터가 표시되는지가 중요합니다. 보기는 보는 방식이 아니라 보는 데이터를 설명합니다. 미묘한 차이입니다.

...

또한 템플릿이 들어오는 곳인 프레젠테이션에서 콘텐츠를 분리하는 것이 합리적입니다. Django에서 "보기"는 어떤 데이터가 표시되는지 설명하지만 일반적으로보기는 데이터가 표시되는 방식을 설명하는 템플릿에 위임합니다.

그렇다면 "컨트롤러"는 어디에 적합합니까? Django의 경우 아마도 프레임 워크 자체 일 것입니다. Django URL 구성에 따라 적절한 뷰에 요청을 보내는 기계입니다.

두문자어에 굶주린 경우 Django는 "MTV"프레임 워크, 즉 "모델", "템플릿"및 "보기"라고 말할 수 있습니다. 그 분석은 훨씬 더 의미가 있습니다.

“Model View Controller”는 단순한 패턴, 즉 공통 아키텍처를 설명하려는 시도라는 점을 명심하십시오. 따라서 더 나은 질문은 "Django가 Model View Controller 패턴에 얼마나 잘 맞는가?"일 수 있습니다.


3
이것은 아마도 가장 직접적인 대답 일 것입니다.
사용자

11

코드를 작성할 때 프레임 워크 조각의 이름에 대해 생각하지 않고 RoR과 같이 상당한 차이가 없습니다. 그러나 modelsDjango에서는 다른 프레임 워크에서 컨트롤러 수준으로 유지되는 로직을 쉽게 포함하기 때문에 제공하는 용도에 따라 다릅니다 .

view장고에이 가져 오는 데이터에 대한 쿼리의 집합, 그리고 템플릿에 전달하는 경향이있다.


10
views장고는 같은 것입니다 controllerMVC에서와 template장고가 더 가능성이있다views
로엘

7

mvt에서 URL에 대한 요청은 View로 발송됩니다. 이 뷰는 모델을 호출하고 조작을 수행하며 출력을 위해 데이터를 준비합니다. 데이터는 응답으로 내 보낸 렌더링 된 템플릿으로 전달됩니다. 이상적으로는 웹 프레임 워크에서 컨트롤러는보기에서 숨겨집니다.

MVC와의 차이점은 mvc에서 사용자가 gui와 상호 작용하고 컨트롤러가 요청을 처리하고 모델에 알리고 뷰가 모델을 쿼리하여 결과를 사용자에게 표시합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.