작성
·
392
·
수정됨
0
안녕하세요.
강의 내용 중에 다음과 같은 코드를 보여 주셨는데요.
post_list = PostViewSet.as_view({
'get': 'list'
})
그런데 장고의 소스 코드를 보면,
class View:
"""
Intentionally simple parent class for all views. Only implements
dispatch-by-method and simple sanity checking.
"""
http_method_names = [
"get",
"post",
"put",
"patch",
"delete",
"head",
"options",
"trace",
]
# 중간 코드 생략
@classonlymethod
def as_view(cls, **initkwargs):
"""Main entry point for a request-response process."""
for key in initkwargs:
if key in cls.http_method_names:
raise TypeError(
"The method name %s is not accepted as a keyword argument "
"to %s()." % (key, cls.__name__)
)
as_view()에 전달한 키워드 인자에 http_method_names
의 항목에 해당하는 키가 있으면 TypeError
를 발생시키는 것으로 되어 있는 것 같습니다.
그런데 as_view()에 강의 내용과 같이 get
을 키워드 인자로 사용해도 되는지 궁금합니다.
답변 1
1
안녕하세요.
살펴보신 코드는 View 클래스의 as_view 클래스메서드이구요.
아래 코드의 as_view는 View의 것이 아니라, DRF ViewSet의 as_view 메서드입니다.
DRF ViewSet의 as_view 메서드 코드를 아래의 링크에서 확인하실 수 있구요.
https://github.com/encode/django-rest-framework/blob/master/rest_framework/viewsets.py#L58
ViewSet의 as_view 클래스메서드의 첫번째 인자는 actions 이며, 이는 action_map 으로서 활용됨을 확인하실 수 있습니다.
코드를 잘 살펴보시고 계시네요.
화이팅입니다. :-)