얼마전에 CBV와 FBV에 대해 글을 올렸었는데요… Django CBV Mixins에

 
최준석

얼마전에 CBV와 FBV에 대해 글을 올렸었는데요…
Django CBV Mixins에 대한 자료가 별로 없네요 ㅠㅠ…
좋은 예제나 설명좀 부탁드려요….

class A(View):

여기서 View말고 많은데…. 다른애들을 각각 어떤 상황에서 써야되는지…
비슷한 이름들로 너무 많네요…ㅠㅠ

  • 박영록

    저는 CBV를 권하지 않고, 꼭 CBV를 쓰고 싶다면 차라리 django rest framework를 권합니다. mixin도 구현상속 개념이라서 OOP에서 그다지 권장할 만한 패턴은 아니구요.

    Hyeonseung Lee

    https://docs.djangoproject.com/en/1.9/topics/class-based-views/
    전 가끔 쓸일이 생기더군요. 템플릿만 달아주면 됩니다.

    Hyeonseung Lee

    https://docs.djangoproject.com/en/1.9/topics/class-based-views/generic-display/

    Hyeonseung Lee

    결국 List, Detail, Create, Update, Delete, Form이 Built-in GenericView의 전부입니다. 저는 박영록님과는 좀 다른 의견인데, 누가 만들어도 비슷한 기능을 기반으로 약간 기능 추가 해서 확장하려면 상속을받아야 하고 상속을 받으려면 클래스여야 하니까 CBV가 생긴거라고 생각합니다. 지금 만들고 있는 사이트에서는 FBV가 절반, 이런식으로 Built-in CBV에서 상속받아 쓰는게 절반정도 되는거 같네요.

    Jung Kyoung Up

    저는 CBV를 권장합니다. 뻔한 패턴을 쓸때에 반복되는 코드를 확줄여줘서 유지관리가 쉬워지는건 덤입니다. 하지만 익히는데 시간은 좀 걸려요. 윗 댓글에 달린 장고 홈페이지가 일단 기본이고 가장 잘 나온 문서입니다. 그 이후는 스스로 구조를 뜯어보고 검색해가며 입맛에 맞게 고쳐쓰셔야합니다.

    박영록

    mixin의 위험성에 대해서는 다음 글과 그 글에 링크 걸린 글들이 도움이 될 듯. https://www.quora.com/Why-are-mixins-so-bad

    여튼 boilerplate code의 중복을 제거하는 방법으로 상속을 이용하는 건 그리 좋은 방법이 아닐 수 있습니다. 차라리 middleware와 decorator를 적절히 조합하는 게 좀더 나은 설계가 나올 가능성이 높죠.

    꼭 cbv가 나쁘다기보다 cbv를 쓰다보면 자연스럽게 composition보다 inheritance 쪽으로 흐르기 쉽다는 것이고, 이런 문제를 잘 인지하고 통제할 수 있다면 괜찮겠죠.

    Hyeonseung Lee

    두분 다 너무 많이 나가신게 아닌가 싶습니다…. Built-in Generic Class Based View에 한정 지어서 보자면 DRY를 위해 필요하면 쓰라고 만들어져 있는거고 질문하신분은 DetailView, ListView 뭐 이런걸 궁금해 하신 것 같습니다만.

    Hyeonseung Lee

    운좋게도 자기가 원하는 기능이 Built-in Generic Class Based View에 딱 맞으면 View코드를 하나도 작성 안하고도 url에 추가하고 템플릿만 붙이면 뜨는데 구지 새로 만들 필요는 없지 않겠습니까?

    Hyeonseung Lee

    저는 레일즈의 스카폴딩 코드처럼 형식을 통해 구조를 배울 수 있다는 점에서 CBV가 상당히 도움이 됐다고 생각합니다만.

    남홍김

    http://learnpythonthehardway.org/book/ex44.html

    최준석

    다들 좋은 의견 감사드립니다… 논쟁이 있었네요 ㅠㅠ;;; 급할때마다 django를 쓰는데, 이번에 처음 CBV를 도입해보려면서 궁금증에 써봤었습니다.
    의견 모두 잘 읽어보고 반영해보겠습니다 🙂 (영어를 못해 공식 document 말고 추천해달라고 했던건 안비밀로…)

    Donghyun Cho

    ^^

    Donghyun Cho

    CBV던 Mixin이던 다 필요에 의해서 만들어 놓은것이니 적당히 필요한 곳에 사용하면 되겠죠.좋다 나쁘다는 지극히 개인적인거라서 상황에 맞게 잘 쓰세요.

Advertisements