Я використовую django-rest-frame . Він надає дивовижний API для самодокументування в стилі адміністратора Django. Але кожен може відвідати ці сторінки та використовувати інтерфейс для додавання даних (POST). Як я можу його відключити?
Я використовую django-rest-frame . Він надає дивовижний API для самодокументування в стилі адміністратора Django. Але кожен може відвідати ці сторінки та використовувати інтерфейс для додавання даних (POST). Як я можу його відключити?
Відповіді:
Вам просто потрібно видалити відображуваний API-рендер зі списку підтримуваних рендерів для перегляду.
Як правило:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
Основа за перегляд:
class MyView(...):
renderer_classes = [renderers.JSONRenderer]
Убік :
У багатьох випадках я думаю, що прикро, що люди вирішили б відключити API, який можна переглядати, оскільки це велика допомога будь-яким розробникам, які працюють над API, і це не дає їм більше дозволів, які вони мали б в іншому випадку . Я бачу , що там може бути бізнес причини для цього в деяких випадках, але в цілому я вважаю це величезним активом. Хоча в деяких випадках можуть бути показані деталі (наприклад, назви користувацьких дій), які непублічний API може не захотіти викривати.
Дивіться також відповідь нижче, щоб отримати докладніші відомості про обмеження віртуального рендерінга API для розробки.
it's a big aid to any developers working on the API
. Чи не повинні вони мати файли налаштувань для розробки та виробництва? У розробці ввімкніть API для перегляду.
Хоча прийнята відповідь на це питання відповідає на питання так, як це було сформульовано, я вважаю, що це не вирішує фактичну проблему.
Для повноти в цій відповіді вимкнення 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
.
FYI: Це також видалить форму з API для перегляду HTML, оскільки вона відповідає на дозволи. Коли авторизований користувач увійде в систему, форма знову буде доступна.
Раунд бонусів :
Увімкніть 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
}
REST_FRAMEWORK['DEFAULT_RENDERER_CLASSES'].append('rest_framework.renderers.BrowsableAPIRenderer')
import rest_framework
For Production Only
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
Просто додайте це до свого Settings.py, слід вимкнути API для перегляду!