Wie deaktiviere ich die durchsuchbare Oberfläche des Django-Rest-Frameworks im Admin-Stil?

150

Ich benutze Django-Rest-Framework . Es bietet eine fantastische durchsuchbare selbstdokumentierende API im Django-Administratorstil. Jeder kann diese Seiten besuchen und über die Benutzeroberfläche Daten hinzufügen (POST). Wie kann ich es deaktivieren?

iForests
quelle
Ja, Benutzer können sich anmelden und die API verwenden. Aber ich möchte ihnen nicht die durchsuchbare Seite im Admin-Stil zeigen.
iForests

Antworten:

246

Sie müssen nur den durchsuchbaren API-Renderer aus Ihrer Liste der unterstützten Renderer für die Ansicht entfernen.

Allgemein:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
    )
}

Per-View-Basis:

class MyView(...):
    renderer_classes = [renderers.JSONRenderer]

Nebenbei :

In vielen Fällen finde ich es schade, dass die Leute die durchsuchbare API auf jeden Fall deaktivieren würden, da dies eine große Hilfe für Entwickler ist, die an der API arbeiten, und ihnen nicht mehr Berechtigungen gibt, als sie sonst hätten . Ich kann sehen, dass es in einigen Fällen geschäftliche Gründe dafür gibt , aber im Allgemeinen würde ich es als großen Vorteil betrachten. In einigen Fällen werden möglicherweise Details angezeigt (z. B. die Namen benutzerdefinierter Aktionen), die eine nicht öffentliche API möglicherweise nicht verfügbar machen möchte.

Weitere Informationen zum Beschränken des durchsuchbaren API-Renderers auf die Entwicklung finden Sie in der folgenden Antwort .

Tom Christie
quelle
31
it's a big aid to any developers working on the API. Sollten sie keine Einstellungsdateien für Entwicklung und Produktion haben? Aktivieren Sie in der Entwicklung die durchsuchbare API.
Jacob Valenta
11
@JacobValenta Ich denke, Tom Christie bedeutet, dass Entwickler von Drittanbietern, die Ihre API verwenden, die durchsuchbare API verwenden können sollten.
Dustin Wyatt
1
Ja, gemäß @DustinWyatt
Tom Christie
7
@ TomChristie Tom, in meinem Fall verhindern Berechtigungen auf Ansichtsebene, dass nicht autorisierte Benutzer mehr als 401 in der durchsuchbaren API sehen, mit Ausnahme der Benutzeransicht, da ich nicht autorisierten POSTs erlaube, neue Benutzer zu erstellen. Dadurch wird das HTML-Formular mit automatisch vervollständigten Daten angezeigt, die ich nicht verfügbar machen möchte. Gibt es eine einfache Möglichkeit, dies für nicht autorisierte Benutzer zu verhindern, ohne eine benutzerdefinierte Vorlage zu erstellen?
Jeffjv
1
Ich dachte nur, ich würde viele oder die meisten Regierungskunden hinzufügen, die explizit darum bitten, dass Erkennungsmethoden (wie durchsuchbare REST-API-Schnittstellen) vollständig deaktiviert werden. Ich sage nicht, dass es Sinn macht oder dass es richtig ist ... es ist einfach so.
Ray Pendergraph
73

Die akzeptierte Antwort auf diese Frage beantwortet zwar die Frage, wie sie formuliert wurde, aber ich bin der Meinung, dass sie das eigentliche Problem nicht löst.

Der Vollständigkeit halber wird diese Antwort deaktiviert, indem die durchsuchbare HTML-API wie folgt aus den Renderer-Klassen entfernt wird:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
    )
}

Das eigentliche Problem, auf das die Frage anspielt, ist jedoch, dass Personen ohne Authentifizierung Beiträge an die API senden können. Während das Entfernen des Formulars weniger offensichtlich ist, schützt diese Antwort die API-Endpunkte nicht.

Zumindest findet jemand diese Frage und möchte die API vor nicht authentifizierten oder nicht autorisierten POST-Übermittlungen schützen. die wollen das ändern API-Berechtigungen

Im Folgenden werden alle Endpunkte als schreibgeschützt festgelegt, sofern der Benutzer nicht authentifiziert ist.

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticatedOrReadOnly',
    )
}

Wenn Sie die API vollständig ausblenden möchten, sofern der Benutzer nicht angemeldet ist, können Sie sie auch verwenden IsAuthenticated .

Zu Ihrer Information: Dadurch wird auch das Formular aus der durchsuchbaren HTML-API entfernt, da es auf Berechtigungen reagiert. Wenn sich ein authentifizierter Benutzer anmeldet, ist das Formular wieder verfügbar.

Bonusrunde :

Aktivieren Sie die durchsuchbare HTML-API nur in 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
}
Routhinator
quelle
7
Dies beantwortet die Frage direkter als die akzeptierte, am besten bewertete Antwort.
Schildkröten sind süß
Wenn Sie separate Konfigurationsdateien für lokal und für die Produktion aufbewahren, können Sie diese einfach in Ihre local.py-Einstellungsdatei einfügen (stellen Sie einfach sicher, dass Sie die obigen Dateien von einem Tupel in eine Liste ändern):REST_FRAMEWORK['DEFAULT_RENDERER_CLASSES'].append('rest_framework.renderers.BrowsableAPIRenderer')
getup8
2
import rest_framework

For Production Only
 REST_FRAMEWORK = {
     'DEFAULT_RENDERER_CLASSES': (
         'rest_framework.renderers.JSONRenderer',
     )
 }

Fügen Sie dies einfach zu Ihren Einstellungen hinzu. Py sollte die Browsable-API deaktivieren!

Syed Faizan
quelle