Хотя принятый ответ на этот вопрос действительно отвечает на вопрос в том виде, как он был сформулирован, я чувствую, что он не решает актуальную проблему под рукой.
Для полноты в этом ответе отключение просматриваемого API-интерфейса HTML выполняется путем удаления его из классов визуализации следующим образом:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
Однако фактическая проблема, на которую ссылается этот вопрос, заключается в том, что люди могут отправлять сообщения в API без аутентификации. Хотя удаление формы делает ее менее очевидной, этот ответ не защищает конечные точки API.
Как минимум, кто-то находит этот вопрос и пытается защитить API от неаутентифицированных или неавторизованных отправлений POST; вы хотите изменить разрешения API
Далее будут установлены все конечные точки только для чтения, если пользователь не аутентифицирован.
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticatedOrReadOnly',
)
}
Если вы хотите полностью скрыть API, если пользователь не вошел в систему, вы также можете использовать IsAuthenticated
.
К вашему сведению: это также приведет к удалению формы из API, доступного для просмотра в формате HTML, поскольку она отвечает на разрешения. Когда авторизованный пользователь входит в систему, форма снова будет доступна.
Бонусный раунд :
Включите только HTML API для просмотра в dev:
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
}