Как отключить интерфейс Django-rest-framework в стиле администратора?
Я использую django-rest-framework. Он обеспечивает удивительный стиль администратора Django, просматриваемый самостоятельно документирующий API. Но любой может посетить эти страницы и использовать интерфейс для добавления данных (POST). Как его отключить?
4 ответов
вам просто нужно удалить визуализатор API browsable из списка поддерживаемых визуализаторов для представления.
вы можете сделать это глобально так:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
или на основе каждого вида, например:
class MyView(...):
renderer_classes = [renderers.JSONRenderer]
в сторону: во многих случаях я думаю, что это позор, что люди решили бы отключить просматриваемый API в любом случае, так как это большая помощь для любых разработчиков, работающих над API, и это не дает им больше прав, что они будут иначе придется. Я вижу, что могут быть деловые причины для этого в некоторые случаев, но в целом я бы счел это огромным преимуществом.
хотя принятый ответ на этот вопрос действительно отвечает на вопрос, как он был сформулирован, я чувствую, что он не решает фактическую проблему.
для полноты в этом ответе отключение просматриваемого HTML api выполняется путем удаления его из классов визуализации следующим образом:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
, актуальная тема вопроса намекает на людей, которые к API без авторизации. Хотя удаление формы делает его менее очевидным, этот ответ не защищает конечные точки API.
как минимум, кто-то находит этот вопрос и хочет защитить API от несанкционированных или несанкционированных сообщений; они хотят изменить разрешения API
ниже будет установлено, что все конечные точки должны быть прочитаны только, если пользователь не аутентифицирован.
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticatedOrReadOnly',
)
}
если вы хотите полностью скрыть API, если пользователь не вошел в систему, вы также можете использовать IsAuthenticated
.
FYI: это также удалит форму из HTML browseable API, поскольку она отвечает на разрешения. Когда аутентифицированный пользователь входит в систему, форма будет доступна снова.
Бонусный Раунд:
включить только просматриваемый 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
}
import rest_framework
For Production Only
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
просто добавьте это в свой Settings.py следует отключить API для просмотра!