django-rest-framework의 관리자 스타일 탐색 가능한 인터페이스를 비활성화하는 방법은 무엇입니까?


150

내가 사용하고 장고 - 나머지 프레임 워크를 . 그것은 훌륭한 Django 관리 스타일 검색 가능한 자체 문서화 API를 제공합니다. 그러나 누구나 해당 페이지를 방문하고 인터페이스를 사용하여 데이터 (POST)를 추가 할 수 있습니다. 어떻게 비활성화합니까?


예, 사용자는 로그인하여 API를 사용할 수 있습니다. 그러나 관리자 스타일의 탐색 가능한 페이지를 표시하고 싶지 않습니다.
— iForests

답변:


246

뷰에 대해 지원되는 렌더러 목록에서 탐색 가능한 API 렌더러를 제거하면됩니다.

일반적으로:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
    )
}

보기 기준 :

class MyView(...):
    renderer_classes = [renderers.JSONRenderer]

옆으로 :

많은 사람들이 API를 개발하는 개발자에게 큰 도움이되기 때문에 어떤 경우에도 탐색 가능한 API를 사용하지 않도록 선택하는 것이 부끄러운 일이라고 생각합니다 . 그렇지 않으면 더 많은 권한을 부여하지 않습니다 . 나는 그렇게 일을위한 비즈니스 이유가있을 수 있습니다 것을 볼 수 있습니다 어떤 경우에, 그러나 일반적으로 나는 그것이 큰 자산 생각 하는데요. 그러나 공개 API가 노출하고 싶지 않은 사용자 정의 조치 이름과 같은 세부 사항이 표시되는 경우도 있습니다.

탐색 가능한 API 렌더러를 개발로 제한하는 방법에 대한 자세한 내용은 아래 답변을 참조하십시오 .


31
it's a big aid to any developers working on the API. 개발 및 프로덕션 용 설정 파일이 없어야합니까? 개발시 탐색 가능한 API를 사용하십시오.
— Jacob Valenta

11
@JacobValenta Tom Christie는 귀하의 API를 사용하는 타사 개발자가 탐색 가능한 API를 사용할 수 있어야 함을 의미 한다고 생각 합니다.
— Dustin Wyatt

1
예, @DustinWyatt에 따라
— Tom Christie

7
@TomChristie Tom, 내 경우에는 뷰 수준 권한으로 인해 승인되지 않은 POST가 새 사용자를 만들 수 있기 때문에 사용자보기를 제외하고 무단 사용자가 탐색 가능한 API에서 401 이상을 볼 수 없습니다. 이로 인해 HTML 양식이 노출되고 싶지 않은 자동 완성 데이터와 함께 표시됩니다. 권한이없는 사용자가 사용자 지정 템플릿을 만들지 못하는 경우이를 방지하는 쉬운 방법이 있습니까?
— jeffjv 2016 년

1
방금 검색 한 REST API 인터페이스와 같은 검색 방법을 완전히 사용 중지하도록 명시 적으로 요청하는 많은 또는 대부분의 정부 고객을 추가한다고 생각했습니다. 나는 그것이 의미가 있거나 맞다고 말하는 것이 아닙니다 ... 그냥 옳습니다.
— Ray Pendergraph

74

이 질문에 대한 대답은 대답대로되어 있지만 실제 문제는 해결되지 않는다고 생각합니다.

이 답변의 완성도를 높이기 위해 검색 가능한 HTML API를 비활성화하는 것은 렌더러 클래스에서 HTML을 제거하여 수행됩니다.

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
    )
}

그러나 질문이 제기하는 실제 문제는 사람들이 인증없이 API에 게시 할 수 있다는 것입니다. 양식을 제거하면 명확하지 않지만이 답변은 API 끝점을 보호하지 않습니다.

최소한 누군가이 질문을 찾아 인증되지 않은 또는 승인되지 않은 POST 제출로부터 API를 보호하려고합니다. API 권한 을 변경하려고합니다.

다음은 사용자가 인증되지 않은 경우 모든 엔드 포인트를 읽기 전용으로 설정합니다.

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticatedOrReadOnly',
    )
}

사용자가 로그인하지 않은 경우 API를 완전히 숨기려면을 사용할 수도 있습니다 IsAuthenticated.

참고 : 또한 권한에 응답 할 때 HTML 찾아보기 가능한 API에서 양식을 제거합니다. 인증 된 사용자가 로그인하면 양식을 다시 사용할 수 있습니다.

보너스 라운드 :

dev에서 검색 가능한 HTML API 만 활성화하십시오.

DEFAULT_RENDERER_CLASSES = (
    'rest_framework.renderers.JSONRenderer',
)

if DEBUG:
    DEFAULT_RENDERER_CLASSES = DEFAULT_RENDERER_CLASSES + (
        'rest_framework.renderers.BrowsableAPIRenderer',
    )

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticatedOrReadOnly',
    ),
    'DEFAULT_RENDERER_CLASSES': DEFAULT_RENDERER_CLASSES
}

7
이것은 가장 많이 받아 들여지는 대답보다 질문에 직접 대답합니다.
— 거북은 귀엽다

로컬 및 프로덕션에 대해 별도의 구성 파일을 유지하는 경우이를 local.py 설정 파일에 넣을 수 있습니다 (튜플에서 목록으로 위의 내용을 변경하십시오) :REST_FRAMEWORK['DEFAULT_RENDERER_CLASSES'].append('rest_framework.renderers.BrowsableAPIRenderer')
— getup8

2
import rest_framework

For Production Only
 REST_FRAMEWORK = {
     'DEFAULT_RENDERER_CLASSES': (
         'rest_framework.renderers.JSONRenderer',
     )
 }

이것을 Settings.py에 추가하면 브라우즈 가능한 API가 비활성화됩니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.