장고:클래스형 뷰, 제네릭 뷰: 두 판 사이의 차이

학교의 모든 지식. SMwiki
둘러보기로 이동 검색으로 이동
편집 요약 없음
73번째 줄: 73번째 줄:
|불러온 모델명을 탬플릿에 보낼 때 그대로 보내는데, 다른 이름을 사용하고 싶을 때
|불러온 모델명을 탬플릿에 보낼 때 그대로 보내는데, 다른 이름을 사용하고 싶을 때
|context_object = target_user
|context_object = target_user
|-
|
|
|
|}
|}
self.get_object() : 사용하고 있는 모델의 객체를 가져온다.
==유의사항==
==유의사항==
===url.py 에서 사용할 때===
===url.py 에서 사용할 때===

2021년 1월 2일 (토) 16:39 판

장고! 웹 프레임워크! 틀:장고

  1. 장고:개요
  2. 장고:웹페이지설계
    1. 장고:앱
    2. 장고:url
    3. 장고:model
      1. 장고:DB
      2. 장고:모델 필드
      3. 장고:모델의 변경
    4. 장고:view
      1. 장고:클래스형 뷰, 제네릭 뷰
      2. 장고:view 각종 기능
    5. 장고:template
    6. 장고:static. 정적파일 사용하기
      1. 장고:CSS 사용하기
      2. 장고:JS 사용하기
      3. 장고:글꼴 사용
      4. 장고:부트스트랩
    7. 장고:media. 미디어 파일 사용하기
  3. 장고:관리자페이지
  4. 장고:settings.py
  5. 장고:기능구현
    1. 장고:회원관리
    2. 장고:유저
    3. 장고:커스텀 유저
    4. 장고:소셜로그인
    5. 장고:입력받기
    6. 장고:저장된 내용 활용하기
    7. 장고:변수 내보내기
    8. 장고:글쓰기
    9. 장고:페이징(페이지나누기)
    10. 장고:답변쓰기(댓글쓰기)
    11. 장고:추천,즐겨찾기
    12. 장고:새글(최신글) 나타내기
    13. 장고:썸머노트 설치
    14. 장고:네비게이션 바 만들기
    15. 장고:검색기능
    16. 장고:카테고리 만들기
    17. 장고:사진 올리기
    18. 장고:파일 업로드
    19. 장고:이메일app 만들기
    20. 장고:매직 그리드
  6. 장고:웹서비스
    1. 장고:Git
    2. 장고:리눅스에 올리기
    3. 장고:우분투에 올리기(nginx 사용)
    4. 장고:도커로 올리기
  7. 장고:팁

클래스형 뷰

기본적으로 뷰는 함수로 만들지만, 코드가 길어지면 클래스형 뷰가 필요하다. 중급자 이상으로 넘어가기 위해선 필수적으로 숙달해야 할 내용.

함수형 뷰보다 재사용하기가 쉬워 고급사용자가 될수록 더 많이 사용하게 되는 형태.

제네릭 뷰

View는 기본적으로 함수로 만들지만, 이미 자주 쓰이는 기능을 또 새로이 만들어야 할까? 이미 개발된 뷰가 있다.이를 제네릭뷰라 부르며, 클래스형으로 구성되어 있다.

장고에서 제공하는 뷰이다.

크게 4가지 분류의 클래스뷰가 있다. CRUD 기능을 제공하게끔.

기능 뷰 이름 비고
Create CreateView form_class = 사용할 폼이름
Read DetailView
Update UpdateView 기본적으로 CreateView와 같은 속성을 갖는다.
Delete DeleteView

Class형 view가 편하다곤 하지만.. 그 강점은 장고가 업데이트 되 때에 일관성 있게 작동할 가능성을 높여준다는 것 외엔.. 딱히 모르겠다. 사실, 엄청 편리한 것도 모르겠고.. 공부를 위해선, 전체작동방식의 느낌을 알기 위해선 함수를 처음부터 짜는 view가 더 좋은 듯하다.(장고 자체를 더 공부해야 한다는 점에서 별로다; 그럴바엔 파이썬 자체를 더 다뤄보지!)

내부적으로 어떻게 작동하는지 알기 어려워, 도리어 혼란스러울 때도 있다.

#제네릭 뷰에서 데이터를 탬플릿에 전달할 때 리스트 이름이 지정되어 있는데, 리스트 이름을 바꾸려면 get_queryset함수 안에 이 변수를 넣는다.(글쓰기 기능구현 참조)

context_object_name='바꿀리스트명'

기본적으로 짧기 때문에 urls.py 안에 바로 기입해줘도 가독성에 무리가 적다.

제네릭 뷰의 변수

변수 설명 사용예
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에서 어떤 변수명을 사용하는 게 아니라, 변수명들이 예약되어 있다.

예약된 변수명
변수 설명
<int:pk> 기본키를 받아들이는 변수

함수명 뒤에 .as_view()를 붙인다.

그냥 view를 사용할 땐 함수명을 쓰면 됬지만, 제네릭 뷰에선 마지막에 .as_view()를 붙여주어야 한다.

탬플릿에서 사용할 때

ListView에선 모델명_list 라는 변수로 탬플릿에 전달된다.

DetailView에선 object라는 변수로 모델이 탬플릿에 전달된다.