장고:클래스형 뷰, 제네릭 뷰
편집하기
Sam
(
토론
|
기여
)
님의 2021년 1월 2일 (토) 16:39 판
(
→클래스형 뷰
)
(
차이
)
← 이전 판
|
최신판
(
차이
) |
다음 판 →
(
차이
)
둘러보기로 이동
검색으로 이동
경고: 이 문서의 오래된 판을 편집하고 있습니다.
이것을 게시하면, 이 판 이후로 바뀐 모든 편집이 사라집니다.
경고:
로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다.
로그인
하거나
계정을 생성하면
편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.
스팸 방지 검사입니다. 이것을 입력하지
마세요
!
{{장고}} =클래스형 뷰= 기본적으로 뷰는 함수로 만들지만, 코드가 길어지면 클래스형 뷰가 필요하다. 중급자 이상으로 넘어가기 위해선 필수적으로 숙달해야 할 내용. 함수형 뷰보다 재사용하기가 쉬워 고급사용자가 될수록 더 많이 사용하게 되는 형태. =제네릭 뷰= View는 기본적으로 함수로 만들지만, 이미 자주 쓰이는 기능을 또 새로이 만들어야 할까? 이미 개발된 뷰가 있다.이를 제네릭뷰라 부르며, 클래스형으로 구성되어 있다. 장고에서 제공하는 뷰이다. 크게 4가지 분류의 클래스뷰가 있다. CRUD 기능을 제공하게끔. {| class="wikitable" |+ !기능 !뷰 이름 !비고 ! |- |Create |CreateView |form_class = 사용할 폼이름 | |- |Read |DetailView | | |- |Update |UpdateView |기본적으로 CreateView와 같은 속성을 갖는다. | |- |Delete |DeleteView | | |} Class형 view가 편하다곤 하지만.. 그 강점은 장고가 업데이트 되 때에 일관성 있게 작동할 가능성을 높여준다는 것 외엔.. 딱히 모르겠다. 사실, 엄청 편리한 것도 모르겠고.. 공부를 위해선, 전체작동방식의 느낌을 알기 위해선 함수를 처음부터 짜는 view가 더 좋은 듯하다.(장고 자체를 더 공부해야 한다는 점에서 별로다; 그럴바엔 파이썬 자체를 더 다뤄보지!) 내부적으로 어떻게 작동하는지 알기 어려워, 도리어 혼란스러울 때도 있다. <nowiki>#</nowiki>제네릭 뷰에서 데이터를 탬플릿에 전달할 때 리스트 이름이 지정되어 있는데, 리스트 이름을 바꾸려면 get_queryset함수 안에 이 변수를 넣는다.(글쓰기 기능구현 참조) context_object_name='바꿀리스트명' 기본적으로 짧기 때문에 urls.py 안에 바로 기입해줘도 가독성에 무리가 적다. ==제네릭 뷰의 변수== {| class="wikitable" |+ !변수 !설명 !사용예 |- |fields |어떤 필드를 기입할지. |fields=['subject', 'text'] |- |tempalte_name |기본 탬플릿 말고 따로 지정할 때 |template_name='app/list.html' |- |success_url |함수의 기능이 성공했을 때 어떤 url로 보낼지 지정 |success_url='/app/' |- |model |어떤 모델에 대한 뷰인지. |model = User |- |context_object |불러온 모델명을 탬플릿에 보낼 때 그대로 보내는데, 다른 이름을 사용하고 싶을 때 |context_object = target_user |- | | | |} self.get_object() : 사용하고 있는 모델의 객체를 가져온다. ==유의사항== ===url.py 에서 사용할 때=== 제네릭 뷰를 사용할 때 urls.py에서 어떤 변수명을 사용하는 게 아니라, 변수명들이 예약되어 있다. {| class="wikitable" |+예약된 변수명 !변수 !설명 |- |<int:pk> |기본키를 받아들이는 변수 |- | | |- | | |} ====함수명 뒤에 .as_view()를 붙인다.==== 그냥 view를 사용할 땐 함수명을 쓰면 됬지만, 제네릭 뷰에선 마지막에 .as_view()를 붙여주어야 한다. ===탬플릿에서 사용할 때=== ListView에선 모델명_list 라는 변수로 탬플릿에 전달된다. DetailView에선 object라는 변수로 모델이 탬플릿에 전달된다.
요약:
학교의 모든 지식. SMwiki에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는
학교의 모든 지식. SMwiki:저작권
문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다.
저작권이 있는 내용을 허가 없이 저장하지 마세요!
취소
편집 도움말
(새 창에서 열림)
이 문서에서 사용한 틀:
틀:장고
(
원본 보기
) (보호됨)
둘러보기 메뉴
개인 도구
로그인하지 않음
토론
기여
로그인
이름공간
문서
토론
한국어
보기
읽기
편집
원본 편집
역사 보기
더 보기
검색
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
특수 문서 목록
문서 정보