남기면 좋잖아
5. 장고 Views(2) 본문
반응형
DRF-React Study
Chapter 3. 장고 Views
장고 기본 CBV API (Base Views)
Base Views
django/views/generic/base.py
- View
- TemplateView
- TemplateResponseMixin
- ContextMixin
- RedirectView
View
- 모든 CBV의 모체
- http method별로 지정 이름의 멤버함수를 호출토록 구현
- get, post
- CBV.as_view(**initkwargs)
RedirectView
- permanent (디폴트 False)
- True : 301 응답(영구적인 이동) - 검색엔진에 영향
- False : 302 (임시이동)
- url = None
- URL 문자열
- pattern_name
- URL Reverse를 수행할 문자열
- query_string
- QueryString을 그대로 넘길 것인지 여부
- permanent (디폴트 False)
장고 기본 CBV API (Generic display views)(1)
- Generic display views
- DetailView
- ListView
- DetailView
- 1개 모델의 1개 object에 대한 템플릿 처리
장고 기본 CBV API (Generic display views)(2)
- ListView
- 1개 모델에 대한 List템플릿 처리
- 모델명소문자_list 이름의 쿼리셋을 템플릿에 전달
- 페이징 처리 지원
- 1개 모델에 대한 List템플릿 처리
장고 기본 CBV API (Generic display views)(3)
django-bootstrap4 설치
https://django-bootstrap4.readthedocs.io/en/latest/index.html
pagenation 디자인 추가
뷰 장식자
장식자(Decorators)
- 어떤 함수를 감싸는 함수
몇가지 장고 기본 장식자
- django.views.decorators.http
- require_http_methods, require_GET, require_POST, require_safe
- 지정 method가 아닐경우, HttpResponseNotAllowed 응답(405)
- require_http_methods, require_GET, require_POST, require_safe
- django.contrib.auth.decorators
- user_passes_test : 지정 함수가 False를 반환하면 login_url로 redirect
- login_required : 로그인이 안되어있다면 login_url로 redirect
- permission_required : 지정 권한이 없을때 login_url로 redirect
- django.contrib.admin.views.decorators
- staff_member_required : 스태프 멤버가 아닐 경우 login_url로 이동
- django.views.decorators.http
CBV에 장식자 적용하기
- @method_decorator(login_required, name='dispatch')
- LoginRequiredMixin 사용하기
장고 기본 CBV API (Ceneric date views)
- Generic Date Views
- ArchiveIndexView : 지정 날짜필드 역순으로 정렬
- YearArchiveView : 지정 year년도
- MonthArchiveView : 지정 year/month
- WeekArchiveView
- DayArchiveView
- TodayArchiveView : 오늘 날짜
- DateDetailView : 지정 year/month/day 목록 중 특정 pk의 detail
- 공통 옵션
- allow_future(디폴트 : False)
- False : 현재시간 이후의 record는 제외
- allow_future(디폴트 : False)
- ArchiveIndexView
- 옵션
- model
- date_field : 정렬 기준 필드
- date_list_period
- context
- latest : QuerySet
- date_list : 등록된 record의 년도 목록
- 옵션
적절한 HTTP 상태코드로 응답하기
- HTTP 상태코드
- HttpResponse 클래스마다 고유한 status_code가 할당
- REST API 만들때 특히 유용
- 대표 상태코드
- 200번대 : 성공
- 300번대 : 요청을 마치기 위해, 추가 조치가 필요
- 400번대 : 클라이언트측 오류
- 500번대 : 서버측 오류
- 302 대표방법
- 숏컷 - redirect
- 404 응답 예
- get_objetc_or_404
- Http404
- 500 응답하는 몇 가지 예
- 뷰에서 요청 처리 중, 뷰에서 미처 잡지못한 오류가 발생했을때
- 예외가 발생할 여지가 있는 코드만 타이트하게 코딩
URL Reverse를 통해 유연하게 URL 생성하기
- URL Dispatcher
- urls.py 변경만으로 각 뷰에 대한 URL이 변경되는 유연한 URL 시스템
- HTML 파일 하나하나 URL을 일일히 계산할 필요없다.
- URL Reverse를 수행하는 함수
- url 템플릿태그
- 내부적으로 reverse 함수
- {% url "blog:post_detail" 100 %}
- reverse 함수
- url 문자열 반환
- reverse('blog:post_detail', args=[100])
- resolve_url 함수
- url 문자열 반환
- resolve_url('blog:post_detail', 100)
- redirect 함수
- redirect('blog:post_detail', 100)
- 301 or 응답
- url 템플릿태그
- 모델 객체에 대한 detail 주소 계산
- resolve_url(post)
- redirect(post)
- 활용하려면 모델의 get_absolute_url 구현
- get_absolute_url() 구현
- resolve_url 함수는 가장 먼저 get_absolute_url() 함수의 존재여부를 확인하고, 존재할 경우 reverse를 수행하지 않고 그 리턴값 즉시 리턴
- 그외 활용
- CrateView / UpdateView
- success_url을 제공하지 않을경우 해당 함수를 참조함
- CrateView / UpdateView
반응형
'Programming > Django' 카테고리의 다른 글
7. 장고 Forms (0) | 2020.07.16 |
---|---|
6. 웹 프론트엔드 기초 및 장고 static (0) | 2020.07.16 |
5. 장고 Views (2) | 2020.06.20 |
4. 장고 Models(3) (0) | 2020.06.06 |
3. 장고 Models(2) (0) | 2020.06.05 |
Comments