의문은 여기서 들었다...
FBV(function based view)로 views.py를 url제어할 때는
두번째 인자로, views.<함수이름> 을 받는 것을 확인할 수 있었는데
장고 실무 심화강의에서 부터 CBV(class based view)로
views.py url제어에서는
path 함수의 두번째 인자로, views.<클래스명>.as_view()를 인자로 받는 것을 확인할 수 있었다.
왜???? 저거 도대체 언제 붙혀야 하는건데? 라는 의문이 들었고
path 함수에 대해서 한번 검색해보고 알아본 경험이 있지만
다시한번 자세히 알아보기로 했다.
결론적으로, path 함수의 두번째 인자로는
views.py에서 정의된 "함수"를 받는다.
클래스가 아니라!
자, 그러면 as_view는 함수일까??
궁금해서 커맨드+클릭 해보았다.
@classmethod
def as_view(cls, **initkwargs):
"""
Store the original class on the view function.
This allows us to discover information about the view when we do URL
reverse lookups. Used for breadcrumb generation.
"""
if isinstance(getattr(cls, 'queryset', None), models.query.QuerySet):
def force_evaluation():
raise RuntimeError(
'Do not evaluate the `.queryset` attribute directly, '
'as the result will be cached and reused between requests. '
'Use `.all()` or call `.get_queryset()` instead.'
)
cls.queryset._fetch_all = force_evaluation
view = super().as_view(**initkwargs)
view.cls = cls
view.initkwargs = initkwargs
# Note: session based authentication is explicitly CSRF validated,
# all other authentication is CSRF exempt.
return csrf_exempt(view)
들어가보니, 함수라는 것을 알 수 있었다.
맨위에 보면, 그냥 함수가 아닌
클래스 메소드!
그래서, 결론적으로
CBV기반의 URL 매핑을 할때에는
path함수의 두번째 인자로
views.클래스.as_view()를 받는 다는 것을 알 수 있었습니다. !!
'Library&Framework > Django' 카테고리의 다른 글
게시글 댓글을 생성하는 함수에서 왜 인자로 article_id 를 꼭 넣어줘야 할까 ?? (0) | 2023.09.20 |
---|---|
[django 기초] models 모듈 안에, User 클래스와 AbstractUser는 어떤 점이 다를까?? (0) | 2023.04.25 |
[Django심화][2주차필기] 9강, 클래스형뷰, CBV(class based view) (0) | 2023.04.23 |
[Django기초] 직렬화(Serialization), 역직렬화(Deserialization)는 django에서 어디에 적용되었는가?? (0) | 2023.04.22 |
[Django심화][2주차필기] 8강. swagger설치 적용 (0) | 2023.04.22 |