modelserializer - ¿Cómo se desactiva la interfaz explorable de estilo de administración de django-rest-framework?
modelserializer django rest framework (3)
Estoy usando django-rest-framework . Proporciona una asombrosa API autodocumentable navegable de estilo administrador de Django. Pero cualquiera puede visitar esas páginas y usar la interfaz para agregar datos (POST). ¿Cómo puedo desactivarlo?
Elimina el ''rest_framework.renderers.BrowsableAPIRenderer'',
de la ''DEFAULT_RENDERER_CLASSES''
en tu configuración
Si bien la respuesta aceptada a esta pregunta responde a la pregunta tal como estaba redactada, creo que no resuelve el problema actual.
Para completar esta respuesta, deshabilitar la API apilable se realiza eliminándola de las clases del procesador de la siguiente 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 la eliminación del formulario lo hace menos obvio, esta respuesta no protege los puntos finales API.
Como mínimo, alguien encuentra esta pregunta y está buscando proteger la API de envíos POST no autenticados o no autorizados; están buscando cambiar los Permisos API
Lo siguiente establecerá que todos los puntos finales 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 usar IsAuthenticated
.
FYI: Esto también eliminará el formulario de la API de búsqueda HTML ya que responde a los permisos. Cuando un usuario autenticado inicia sesión, el formulario estará disponible nuevamente.
Ronda de bonificación :
Solo habilite la API HTML explorable en 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
}
Solo tiene que eliminar el representador API navegable de su lista de procesadores admitidos para la vista.
Puedes hacer esto globalmente así:
REST_FRAMEWORK = {
''DEFAULT_RENDERER_CLASSES'': (
''rest_framework.renderers.JSONRenderer'',
)
}
O en una base de vista como tal:
class MyView(...):
renderer_classes = [renderers.JSONRenderer]
Aparte : en muchos casos, creo que es una pena que la gente elija desactivar la API navegable en cualquier caso, ya que es una gran ayuda para los desarrolladores que trabajan en la API, y no les da más permisos que de otra manera tendrían . Puedo ver que puede haber razones comerciales para hacerlo en algunos casos, pero en general lo consideraría un gran activo.