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.