Programing

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

lottogame 2020. 6. 25. 08:05
반응형

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


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


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

일반적으로:

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

보기 기준 :

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

옆으로 :

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

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


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

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

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
}

import rest_framework

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

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

참고 URL : https://stackoverflow.com/questions/11898065/how-to-disable-admin-style-browsable-interface-of-django-rest-framework

반응형