2013-02-09 2 views
39

매우 다루기 쉽기 때문에 장고 앱을 만들 때 항상 FBV (함수 기반 뷰)를 사용합니다. 그러나 대부분의 개발자는 CBV (클래스 기반 뷰)를 사용하고 CBV를 구현하는 데 어려움이있는 복잡한보기 인 경우 FBV 만 사용하는 것이 더 낫다고 말했습니다.클래스 기반 뷰 VS 함수 기반 뷰

왜? CBV 사용의 이점은 무엇입니까?

+9

"대부분의 개발자"? 정말? 나는 그것을 의심한다. 개인적으로 CBV는 어떤 상황에서는 좋다고 인정하지만 거의 사용하지 않습니다. –

+2

그래, 내가 읽은 책에 언급되어 있지만 그것에 대해 모르겠다. CBV보다 FBV를 사용하는 것이 좋습니다. – catherine

+5

@DanielRoseman Daniel이 cbv를 사용하지 않는다면, cbv를 모르거나 사용하지 않을 것을 걱정하지 마십시오. – doniyor

답변

55

가장 중요한 장점은 상속입니다. 대규모 프로젝트의 경우 비슷한 전망을 많이 가질 것입니다. 동일한 코드를 반복해서 작성하는 대신 기본보기에서 상속하는 것만으로도됩니다.

또한 django에는 가장 일반적인 작업을 수행하는 데 사용할 수있는 일반 뷰 클래스 모음이 함께 제공됩니다. 예를 들어 DetailView 클래스는 모델 중 하나에서 하나의 객체를 전달하고 템플릿으로 렌더링 한 다음 HTTP 응답을 반환하는 데 사용됩니다. 당신은

url(r'^author/(?P<pk>\d+)/$', DetailView.as_view(model=Author)), 

.. 똑바로 URL의 conf에 연결하거나

class SpecialDetailView(DetailView): 
    model = Author 
    def get_context_data(self, *args, **kwargs): 
     context = super(SpecialDetailView, self).get_context_data(*args, **kwargs) 
     context['books'] = Book.objects.filter(popular=True) 
     return context 

지금 당신의 템플릿을 렌더링 책 개체의 컬렉션을 전달됩니다 사용자 정의 기능으로 확장 할 수있다.

시작하기에 좋은 곳은 docs입니다.

업데이트

ccbv.co.uk는 이미 사용할 수있는 클래스 기반의 뷰에 대한 정보를 사용하는 포괄적이고 쉬운 있습니다. 두 FROM

+15

내 생각에 가장 좋은 곳은 http://ccbv.co.uk/입니다. – meshy

+0

@meshy 포인터 주셔서 감사합니다. – GreenAsJade

+2

@meshy cbv의 도메인 이름입니다. 누군가 cbv를 정말 사랑해야합니다! – NeoWang

12

어떤 단어

팁 대체 Apporach을 특종 - 만하면 뷰의

일부 개발자는 대부분의 전망과 CBVs에 대한 FBVs를 사용의 측면에 잘못을하는 것을 선호 FBVs와 함께 머물 서브 클래스 화됩니다. 그 전략도 훌륭합니다.

8

DJango로 시작했을 때 학습 곡선과 약간 복잡한 구조로 인해 CBV를 사용하지 못했습니다. 2 년이 넘는 기간 동안 나는 몇 군데에만 FBV를 사용합니다. 코드가 정말 간단하고 단순하게 유지 될 것이라고 확신합니다.

CBV와 다중 상속의 주요 장점은 신호 작성, 도우미 메서드 작성 및 붙여 넣기 코드 복사를 완전히 피할 수 있다는 것입니다. 특히 앱이 기본 CRUD 작업 이상의 기능을 수행하는 경우 다중 상속이있는 뷰는 신호와 도우미 메소드가있는 코드, 특히 알 수없는 코드베이스 인 경우 디버깅하기가 여러 번 쉬워집니다.

다중 상속 CBV 외에도 디스패치, 템플릿 검색, 다양한 요청 유형 처리, 템플릿 컨텍스트 변수 전달, 양식 유효성 검사 등 다양한 방법을 제공합니다. 이것들은 모듈화 된 코드이므로 유지 보수가 가능합니다. 당신이 당신의 장고 응용 프로그램의 모든 기능을 CRUD 작업을 구현하려는 경우

1

클래스 기반의 전망이 우수하고, 같은 기능을 기반으로보기를 사용하여 구현하는 약간의 시간 & 노력을 할 것이다.

사이트/응용 프로그램에 CRUD을 구현하지 않을 경우 기능 기반보기를 사용하는 것이 좋습니다. 단순히 템플릿을 렌더링하는 것임을 의미합니다.

라이브 인 클래스 기반보기를 사용하여 간단한 CRUD 기반 응용 프로그램을 만들었습니다. http://filtron.pythonanywhere.com/view/을 방문하여 즐거운 시간 보내십시오. 그러면 그 중요성을 알게 될 것입니다.