¿Cómo deshabilitar la interfaz navegable de estilo administrador de django-rest-framework?
Estoy usando django-rest-framework . Proporciona una impresionante API autodocumentada navegable de estilo administrador de Django. Pero cualquiera puede visitar esas páginas y utilizar la interfaz para agregar datos (POST). ¿Cómo puedo desactivarlo?
Sólo necesita eliminar el renderizador API navegable de su lista de renderizadores compatibles para la vista.
Generalmente:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
Por visualización:
class MyView(...):
renderer_classes = [renderers.JSONRenderer]
Aparte :
En muchos casos, creo que es una pena que la gente elija deshabilitar la API navegable de todos modos, ya que es de gran ayuda para cualquier desarrollador que trabaje en la API y no les otorga más permisos de los que tendrían de otro modo . Puedo ver que puede haber razones comerciales para hacerlo en algunos casos, pero en general lo consideraría una gran ventaja. Sin embargo, en algunos casos es posible que se muestren detalles (como los nombres de acciones personalizadas) que una API no pública quizás no quiera exponer.
Consulte también la respuesta a continuación para obtener más detalles sobre cómo restringir el renderizador de API navegable al desarrollo.
Si bien la respuesta aceptada a esta pregunta responde a la pregunta tal como fue redactada, creo que no resuelve el problema real que nos ocupa.
Para que esta respuesta esté completa, la desactivación de la API HTML navegable se realiza eliminándola de las clases de renderizado de esta manera:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
Sin embargo, el problema real al que alude la pregunta es que las personas pueden publicar en la API sin autenticación. Si bien eliminar el formulario lo hace menos obvio, esta respuesta no protege los puntos finales de la API.
Como mínimo, alguien encuentra esta pregunta y busca proteger la API de envíos POST no autenticados o no autorizados; están buscando cambiar los permisos de API
Lo siguiente configurará todos los puntos finales para que sean de solo lectura a menos que el usuario esté autenticado.
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticatedOrReadOnly',
)
}
Si desea ocultar completamente la API a menos que el usuario haya iniciado sesión, también puede utilizar IsAuthenticated
.
Para su información: esto también eliminará el formulario de la API navegable HTML ya que responde a los permisos. Cuando un usuario autenticado inicie sesión, el formulario estará disponible nuevamente.
Ronda de bonificación :
Habilite solo la API HTML navegable en desarrollo:
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
}
# For Production Only
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
Simplemente agregue esto a su configuración. ¡py debería deshabilitar la API navegable!