Sto usando django-rest-framework . Fornisce una fantastica API autocompattante consultabile in stile admin di Django. Ma chiunque può visitare quelle pagine e utilizzare l'interfaccia per aggiungere dati (POST). Come posso disabilitarlo?
Sto usando django-rest-framework . Fornisce una fantastica API autocompattante consultabile in stile admin di Django. Ma chiunque può visitare quelle pagine e utilizzare l'interfaccia per aggiungere dati (POST). Come posso disabilitarlo?
Risposte:
Devi solo rimuovere il renderer API navigabile dal tuo elenco di renderer supportati per la vista.
Generalmente:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
Base per visualizzazione:
class MyView(...):
renderer_classes = [renderers.JSONRenderer]
A parte :
In molti casi penso che sia un peccato che la gente scelga di disabilitare l'API navigabile in ogni caso, poiché è un grande aiuto per tutti gli sviluppatori che lavorano sull'API e non dà loro più autorizzazioni che altrimenti avrebbero . Vedo che in alcuni casi potrebbero esserci ragioni commerciali per farlo , ma in generale lo considero un grande vantaggio. Tuttavia, in alcuni casi potrebbero essere mostrati dettagli (come i nomi delle azioni personalizzate) che un'API non pubblica potrebbe non voler esporre.
Vedi anche la risposta di seguito per maggiori dettagli sulla limitazione allo sviluppo del renderer API navigabile.
it's a big aid to any developers working on the API
. Non dovrebbero avere file di impostazioni per lo sviluppo e la produzione? In fase di sviluppo abilitare l'API navigabile.
Mentre la risposta accettata a questa domanda risponde alla domanda così come è stata formulata, ritengo che non risolva il problema attuale.
Per completezza in questa risposta, la disabilitazione dell'API HTML navigabile viene eseguita rimuovendola dalle classi del renderer in questo modo:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
Tuttavia, il vero problema a cui si pone la domanda è che le persone possono pubblicare nell'API senza autenticazione. La rimozione del modulo lo rende meno ovvio, questa risposta non protegge gli endpoint API.
Come minimo, qualcuno trova questa domanda e sta cercando di proteggere l'API da invii POST non autenticati o non autorizzati; stanno cercando di modificare le autorizzazioni API
Quanto segue imposterà la lettura di tutti gli endpoint a meno che l'utente non sia autenticato.
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticatedOrReadOnly',
)
}
Se desideri nascondere completamente l'API a meno che l'utente non abbia effettuato l'accesso, puoi anche utilizzare IsAuthenticated
.
Cordiali saluti: Questo rimuoverà anche il modulo dall'API navigabile HTML mentre risponde alle autorizzazioni. Quando un utente autenticato accede, il modulo sarà nuovamente disponibile.
Round bonus :
Abilita l'API HTML navigabile solo in sviluppo:
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',
)
}
Basta aggiungere questo al tuo Settings.py dovrebbe disabilitare l'API Navigabile!