Używam django-rest-framework . Zapewnia niesamowity, samodokumentujący się interfejs API w stylu administratora Django. Ale każdy może odwiedzić te strony i użyć interfejsu do dodawania danych (POST). Jak mogę to wyłączyć?
django
django-rest-framework
iForests
źródło
źródło
Odpowiedzi:
Wystarczy usunąć moduł renderujący interfejsu API z możliwością przeglądania z listy obsługiwanych mechanizmów renderowania dla tego widoku.
Ogólnie:
Podstawa wyświetlenia:
Poza :
Zobacz również odpowiedź poniżej, aby uzyskać więcej informacji na temat ograniczania modułu renderowania interfejsu API z możliwością przeglądania do programowania.
źródło
it's a big aid to any developers working on the API
. Czy nie powinni mieć plików ustawień do programowania i produkcji? W trakcie opracowywania włącz przeglądalny interfejs API.Chociaż przyjęta odpowiedź na to pytanie odpowiada na pytanie tak, jak została sformułowana, uważam, że nie rozwiązuje ona rzeczywistego problemu.
Aby uzyskać kompletność w tej odpowiedzi, wyłączenie interfejsu API HTML z możliwością przeglądania odbywa się poprzez usunięcie go z klas renderowania, w następujący sposób:
Jednak faktycznym problemem, do którego odnosi się pytanie, jest możliwość wysyłania postów do API bez uwierzytelniania. Chociaż usunięcie formularza czyni go mniej oczywistym, ta odpowiedź nie chroni punktów końcowych interfejsu API.
Jako minimum, ktoś znajduje to pytanie i chce chronić API przed nieuwierzytelnionymi lub nieautoryzowanymi zgłoszeniami POST; chcą zmienić uprawnienia API
Poniższe ustawienia ustawią wszystkie punkty końcowe jako tylko do odczytu, chyba że użytkownik jest uwierzytelniony.
Jeśli chcesz całkowicie ukryć API, chyba że użytkownik jest zalogowany, możesz również użyć
IsAuthenticated
.Do Twojej wiadomości: Spowoduje to również usunięcie formularza z interfejsu API z możliwością przeglądania w formacie HTML, ponieważ odpowiada on na uprawnienia. Gdy zaloguje się uwierzytelniony użytkownik, formularz będzie ponownie dostępny.
Runda bonusowa :
Włączaj interfejs API HTML z możliwością przeglądania tylko w wersji deweloperskiej:
źródło
REST_FRAMEWORK['DEFAULT_RENDERER_CLASSES'].append('rest_framework.renderers.BrowsableAPIRenderer')
Wystarczy dodać to do swojego Settings.py, aby wyłączyć Browsable API!
źródło