2017-01-10 5 views
3

DRG (django-rest-framework)를 사용하여 광산 사이트의 REST API를 제공합니다. 내가 아는 바로는 API 문서의 자동 생성은 DRF의 schema 생성에 의존합니다. 그런 다음 타사 도구로 해석하여 예쁜 문서를 만들 수 있습니다. 난 django-rest-swagger DRF의 스키마에서 예쁜 문서를 생성하는 도구로 사용했지만 내 문제에 대한 솔루션을 DRF 기반, 내가 "꽤"스키마를 변환하는 데 사용하는 도구를 독립적 인 용의자.API 문서에서보기를 제외하려면 어떻게해야합니까?

기본적으로 DRF는 전체 API에 대한 설명서를 제공합니다. 일부는 내 사이트 자체를위한 것이지만 문제는 아닙니다. 일부보기가 설명서에서 제외되기를 바랍니다. 일부보기는 항상 제외해야합니다. 일부보기는 문서를 보는 사용자가 사이트에 로그인하지 않은 경우에만 제외해야합니다.

답변

4

이것은 잘 설명되어 있지 않습니다. 클래스 기반보기에서 특성을 True으로 설정하면 문서에서보기를 제외 할 수 있습니다. 예 :

from rest_framework import viewsets, mixins 
class SomeViewSet(mixins...., viewsets.GenericViewSet): 
    exclude_from_schema = True 

    [...] 

당신이 위의 그림과 같이 속성을 설정하는 효과를 가지고있는 @api_view 장식,에 대한 매개 변수의 존재를 문서화 히트 here을 찾을 수 exclude_from_schema에 대한 현재 문서를 검색합니다. 속성 자체는 현재 DRF의 문서에서 언급되지 않았습니다. 당신이 조건에 따라보기 을 제외 할 경우 exclude_from_schema는 계산 된 속성이되도록

, 당신은 @property 장식을 사용할 수 있습니다. 뒤에서 DRF가 뷰의 스키마를 생성해야 할 때 사용자가 문서 페이지를 탐색했을 때 생성 된 Request 개체를 사용하여 클래스를 인스턴스화합니다. 그래서 당신은 문서에 액세스하는 사용자가 인증 여부되었는지 여부를 확인하기 위해 테스트 할 수 있습니다

from rest_framework import viewsets, mixins, permissions 
class SomeViewSet(mixins...., viewsets.GenericViewSet): 
    @property 
    def exclude_from_schema(self): 
     return not permissions.IsAuthenticated().has_permission(self.request, 
                   self) 

    [...] 

self.request 사용자가 문서에 대해 물었을 때 생성 된 Request 개체입니다. 스키마를 생성하는 코드가 SomeViewSet에 설정 될 수있는 permission_classes 특성을 사용하지 않기 때문에 우리는 rest_framework.permissions이 제공하는 클래스 중 하나를 직접 사용합니다.

관련 문제