Я использую django-rest-framework. Он предоставляет потрясающий API-интерфейс, поддерживающий API-интерфейс Django, который можно просматривать самостоятельно. Но каждый может посетить эти страницы и использовать интерфейс для добавления данных (POST). Как отключить его?
Как отключить браузерный интерфейс для просмотра django-rest-framework?
Ответ 1
Вам просто нужно удалить средство просмотра API с возможностью просмотра из списка поддерживаемых средств отображения для представления.
Как правило:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
На основе просмотра:
class MyView(...):
renderer_classes = [renderers.JSONRenderer]
В сторону:
Во многих случаях мне кажется обидным, что люди в любом случае решили отключить API с возможностью просмотра, поскольку это очень помогает разработчикам, работающим над API, и не дает им больше разрешений, чем они могли бы иметь. Я вижу, что в некоторых случаях для этого могут быть деловые причины, но в целом я считаю это огромным преимуществом. Хотя в некоторых случаях могут отображаться подробности (например, имена пользовательских действий), которые непубличный API может не захотеть раскрывать.
См. также ответ ниже для получения более подробной информации об ограничении просматриваемого API-рендеринга для разработки.
Ответ 2
Хотя принятый ответ на этот вопрос действительно отвечает на вопрос в том виде, как он был сформулирован, я чувствую, что он не решает актуальную проблему под рукой.
Для полноты в этом ответе отключение просматриваемого HTML-интерфейса API выполняется путем удаления его из классов визуализации следующим образом:
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
.
К вашему сведению: это также приведет к удалению формы из просматриваемого HTML-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
}
Ответ 3
import rest_framework
For Production Only
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
Просто добавьте это в файл Settings.py, чтобы отключить интерфейс Browsable API!
Ответ 4
Удалите
'rest_framework.renderers.BrowsableAPIRenderer',
из 'DEFAULT_RENDERER_CLASSES'
в ваших настройках