본문 바로가기
AI 웹개발반

[TIL] Django, generic views에 대해 알아보자

by 째깍단 2023. 4. 17.

오늘 한 것

 

[O] : 백준 2문  : 입출력/사칙연산 문제 풀었다

 

[O] : 장고 튜토리얼 진행 : 6장

 

 

 

 

제너릭 뷰

  • 제너릭 뷰. 더 알아보기
    "generic views" = 장고에서 제공하는 단축키

    각 제너릭 뷰는 어떤 모델이 적용될지 알아야한다 = model
    template_name 기본 템플릿 이름 대신 특정이름을 사용하도록 알려주는 것임
    url에서 캡쳐된 기본 키 값이 pk라고 기대함
     
from django.views import genericclass

def DetailView(generic.DetailView):
	model = Question
	template_name = "polls/detail.html"

 

제네릭 뷰의 종류

 

[출처] : https://akpark.tistory.com/34

 

 

 

 

+++ 추가 글 작성 +++

 

정리를 하다보니 serializer와 함께 활용하려면 많이 헷갈릴듯.

장고에 대한 아주 깊은 이해도가 필요할 것 같다..

 

 

 

 

 

View의 기본적인 사용 예시

 

- views.py : import, 상속하여 get post put delete 를 사용하거나, 내장되어있는 메서드들을 활용한다.

 

from django.http import HttpResponse
from django.views import View

class MyView(View):
    def get(self, request, *args, **kwargs):
        return HttpResponse("Hello, World!")

 

- urls.py : 클래스View를 선언하고 as_View()로 url을 연결해준다

 

from django.urls import path

from myapp.views import MyView

urlpatterns = [
    path("mine/", MyView.as_view(), name="my-view"),
]

 

 

 

 

 

> Base views

기본이 되는 세 클래스. 자체적으로 사용할 수도 있고, 다른 하위 View에 상속되어있다! 

 

 

  • View : 기본 뷰 클래스. 다른 클래스 기반 View에서 상속하고 있다.
class django.views.generic.base.View #경로

 

 

* 메서드 순서도

: 모든 뷰가 기본적으로 이 순서로 흘러가고, options에서 각각의 고유 기능을 수행

  1. setup() : 키 뷰의 초기 설정 내용을 보여준다
  2. dispatch() : 인수와 인수를 받아들이고 HTTP응답을 반환
  3. http_method_not_allowed() : 뷰가 지원하지 않는 HTTP메서드로 호출된 경우 대신 호출됨
  4. options() : 옵션 HTTP 요청에대한 응답 처리(TemplateView에서는 get_context_data()로 템플릿 렌더링, RedirectView에서는 get_redirect_url()로 리디렉션 실행)

 

 

 

  • TemplateView : URL에 캡처된 매개변수가 포함된 컨텍스트를 사용하여 지정된 템플릿을 렌더링

 

  • RedirectView : 지정된 URL로 리디렉션 함

 

 

 

 

 

 

> Generic display views

데이터 표시 뷰, 프로젝트에서 가장 일반적으로 사용됨

 

 

  • DetailView : 세부 내용을 가져옴. 

     - options()

  1. get_template_names()
  2. get_slug_field()
  3. get_queryset()
  4. get_object()
  5. get_context_object_name()
  6. get_context_data()
  7. get()
  8. render_to_response()

 

 

 

  • ListView : 개체 목록을 나타내는 페이지(쿼리, 쿼리셋.. 꼭 쿼리집합일 필요는 없다)

    - options()

  1. get_template_names()
  2. get_queryset()
  3. get_context_object_name()
  4. get_context_data()
  5. get()
  6. render_to_response()

 

 

 

 

 

 

> Generic editing views

콘텐츠 편집 기반 뷰 

 

  • FormView : 폼을 표시하는 view / 에러시 유효성검사 에러를 보여준다, 성공시 url로 리디렉션
  • CreateView : 객체 생성, 유효성 검사 시 오류(있는 경우)가 있는 폼 다시 표시, 객체 저장을 위한 폼을 표시하는 view
  • UpdateView : 기존 개체 편집 양식 뷰, 유효성 검사, 개체 변경사항 저장
  • DeleteView : 확인페이지 get, 기존 개체 삭제 view  POST 메서드로 들어올 때만 지워줌! 

 

 

 

 

 

 

> Generic date views

 

  • ArchiveIndexView :  날짜 별로 최신 개체를 보여주는 최상위 index page,
  • YearArchiveView : 연간 아카이브 페이지. 
  • MonthArchiveView : 지정된 달의 모든 개체를 보여주는 월간 아카이브 페이지. 
  • WeekArchiveView : 지정된 주의 모든 개체를 보여주는 주간 아카이브 페이지.
  • DayArchiveView :  지정된 날짜의 모든 개체 표시, 일간 아카이브 페이지.
  • TodayArchiveView : 일일 아카이브 페이지. 오늘!   Today를 제외하고  DayArchieveView와 동일!
  • DateDetailView : 개별 개체를 나타냄.

 

``날짜가 미래인 개체는 allow_future해야 포함된다. allow_future_ True_

 

 

[참조] : https://docs.djangoproject.com/en/4.2/topics/class-based-views/generic-display/

 

 

 

 

#  팀 과제에서 활용한 내용 기록

 

 

> urls.py

urlpatterns : [
    path("comment/my", views.get_my_comments.as_view(), name="my_comments"),]

 

 

 

> views.py

class MyCommentList(generic.ListView):
    # ListView를 사용해 댓글 10개씩 보여주기
    model = CommentModel
    template_name = "comments/my_comment.html"
    context_object_name = "latest_comment_list"
    paginate_by = 20

    def get_queryset(self):
        # 최근 댓글 불러오기
        my_comment = CommentModel.objects.all().order_by("-created_at")
        return my_comment

 

 

ListView 사용

 

template_name : .html 템플릿 파일과 연결할 수 있음

 

model : 가져올 모델 정의

 

context_object_name : template이나 다른 곳에서 활용하고자할 때 사용할 이름

                                            = object_list가  기본 값으로 들어간다.

 

queryset = 쿼리할 개체 목록을 지정할 수도 있다!

 

 

 

 

 

 

 

 

 

 

 

이전 학습내용을 바탕으로 내일 할 것

  • 장고 기초 점검하기
  • 장고 심화 들어가기
  • 알고리즘 풀기