Bien que la réponse acceptée à cette question réponde à la question telle qu'elle a été formulée, j'estime qu'elle ne résout pas le problème en question.
Pour être complet dans cette réponse, la désactivation de l'API HTML navigable se fait en la supprimant des classes de rendu comme suit:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
Cependant, le problème réel auquel la question fait allusion est que les gens peuvent publier sur l'API sans authentification. Bien que la suppression du formulaire le rend moins évident, cette réponse ne protège pas les points de terminaison de l'API.
Au minimum, quelqu'un trouve cette question et cherche à protéger l'API contre les soumissions POST non authentifiées ou non autorisées; cherchent à modifier les autorisations de l' API
Ce qui suit définira tous les points de terminaison pour qu'ils soient en lecture seule à moins que l'utilisateur ne soit authentifié.
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticatedOrReadOnly',
)
}
Si vous souhaitez masquer complètement l'API à moins que l'utilisateur ne soit connecté, vous pouvez également utiliser IsAuthenticated
.
FYI: Cela supprimera également le formulaire de l'API navigable HTML car il répond aux autorisations. Lorsqu'un utilisateur authentifié se connecte, le formulaire est à nouveau disponible.
Tour bonus :
Activez uniquement l'API HTML navigable dans 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
}