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가 비활성화됩니다!
'Programing' 카테고리의 다른 글
SQLAlchemy : 실제 쿼리 인쇄 (0) | 2020.06.25 |
---|---|
같은 클래스에서 두 개의 메소드를 동기화하면 동시에 실행할 수 있습니까? (0) | 2020.06.25 |
Emacs에서 패키지 업데이트 (0) | 2020.06.25 |
Object.create (null)로 JS 객체를 생성합니까? (0) | 2020.06.25 |
iPhone SDK : loadView와 viewDidLoad의 차이점은 무엇입니까? (0) | 2020.06.25 |