2013-02-09 20 views
39

Zawsze używam FBV (widoków opartych na funkcjach) podczas tworzenia aplikacji django, ponieważ jest to bardzo łatwe w obsłudze. Jednak większość programistów stwierdziła, że ​​lepiej jest używać CBV (widoków opartych na klasach) i używać tylko FBV, jeśli jest to skomplikowany widok, który byłby trudny do wdrożenia z CBV.Widoki oparte na klasach Widoki oparte na funkcjach VS

Dlaczego? Jakie są zalety korzystania z CBV?

+9

"Większość programistów"? Naprawdę? Wątpię w to. Osobiście, choć zdaję sobie sprawę, że w niektórych sytuacjach CBV są dobre, prawie nigdy ich nie używam. –

+2

Tak, co jest powiedziane w książce, którą czytam, ale nie wiem o tym. Bardzo lubię używać FBV niż CBV. – catherine

+5

@ DanielRoseman, jeśli Daniel nie używa cbv, zatrzymuję się teraz martwiąc się o niewiedzę i nie używając cbv .. – doniyor

Odpowiedz

55

Jedną z najważniejszych zalet jest dziedziczenie. W przypadku dużego projektu prawdopodobnie będziesz miał wiele podobnych wyświetleń. Zamiast pisać ten sam kod raz za razem, możesz po prostu mieć swoje widoki dziedziczące z widoku podstawowego.

Również statki django z kolekcją ogólnych klas widoku, które mogą być używane do wykonywania najczęstszych zadań. Na przykład klasa DetailView służy do przekazywania pojedynczego obiektu z jednego z modeli, renderowania go za pomocą szablonu i zwracania odpowiedzi http. można go podłączyć bezpośrednio do adresu URL konf ..

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

Albo można przedłużyć go z niestandardowych funkcjonalności

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 

Teraz szablon zostanie przekazany zbiór obiektów książkowych dla renderowania.

To miłe miejsce na początek to jest posiadanie dobrego odczytu z docs.

Aktualizacja

ccbv.co.uk ma wszechstronny i łatwy w użyciu informacji o widokach klasy oparte już masz dostępne.

+15

W mojej (tendencyjnej) opinii, najlepszym miejscem do rozpoczęcia jest http://ccbv.co.uk/ :) – meshy

+0

Dzięki za wskazówkę @meshy. – GreenAsJade

+2

@meshy Nazwa domeny dla cbv, ktoś musi naprawdę kochać cbv! – NeoWang

12

Kilka słów od dwie miarki

Tip Alternative Apporach - pobyt z FBVs

Niektóre deweloper wolą zaważyć na korzystania FBVs dla większości poglądów i CBVs tylko dla widoków, które wymagają do podklasy. Ta strategia też jest w porządku.

8

Kiedy zaczynałem od DJango, nigdy nie używałem CBV z powodu ich krzywej uczenia się i nieco skomplikowanej struktury. Szybko do przodu przez dwa lata, używam FBV tylko w kilku miejscach. Gdzie jestem pewien, że kod będzie naprawdę prosty i pozostanie prosty.

Główną zaletą CBVs i wielokrotne Dziedziczenie że przychodzi wraz z nimi jest to, że mogę całkowicie uniknąć pisania sygnałów, metody pomocnika i skopiować kod pasty. Zwłaszcza w przypadkach, gdy aplikacja wykonuje znacznie więcej niż podstawowe operacje CRUD. Widoki z dziedziczeniem wielokrotnym są wielokrotnie łatwiejsze do debugowania kodu za pomocą sygnałów i metod pomocniczych, szczególnie jeśli są to nieznane podstawy kodu.

Oprócz wielu dziedziczonych CBV-ów, zapewniają różne metody tworzenia, wysyłania szablonów, obsługi różnych typów zleceń, przekazywania zmiennych kontekstowych szablonu, formularzy sprawdzania poprawności i wielu innych elementów dodatkowych. Sprawiają one, że kod jest modułowy, a tym samym możliwy do utrzymania. poglądy oparte

1

klasy są doskonałe, jeśli chcesz, aby wdrożyć w pełni funkcjonalne operacje CRUD w aplikacji Django, a sam zajmie trochę czasu & starań, aby zrealizować za pomocą funkcji poglądy oparte.

Zalecam korzystanie z widoków opartych na funkcjach, gdy nie zamierzasz wdrożyć żadnego CRUD na swojej stronie/aplikacji oznacza, że ​​Twoim zamiarem jest po prostu wyrenderowanie szablonu.

Utworzyłem prostą aplikację opartą na CRUD przy użyciu widoków opartych na klasach, które są aktywne. Odwiedź http://filtron.pythonanywhere.com/view/ i ciesz się. Wtedy poznasz znaczenie tego.

Powiązane problemy