인프런 커뮤니티 질문&답변

코해님의 프로필 이미지

작성한 질문수

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

ViewSet과 Router

as_view()에서 인자로 http method의 사용 가능 여부

작성

·

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 메서드입니다.

image

DRF ViewSet의 as_view 메서드 코드를 아래의 링크에서 확인하실 수 있구요.

https://github.com/encode/django-rest-framework/blob/master/rest_framework/viewsets.py#L58

image

ViewSet의 as_view 클래스메서드의 첫번째 인자는 actions 이며, 이는 action_map 으로서 활용됨을 확인하실 수 있습니다.

코드를 잘 살펴보시고 계시네요.

화이팅입니다. :-)

 

코해님의 프로필 이미지

작성한 질문수

질문하기