Django-rest-framework'ün yönetici tarzı göz atılabilir arayüzü nasıl devre dışı bırakılır?


157

Ben kullanıyorum django-dinlenme-çerçeve . Harika bir Django yönetici tarzı göz atılabilir kendi kendini belgeleyen API sağlar. Ancak bu sayfaları herkes ziyaret edebilir ve veri eklemek (POST) için arayüzü kullanabilir. Nasıl devre dışı bırakabilirim?


Evet, kullanıcılar oturum açabilir ve API'yi kullanabilir. Ancak onlara yönetici tarzı göz atılabilir sayfayı göstermek istemiyorum.
iForests

Yanıtlar:


253

Görünümü için desteklenen oluşturucular listenizden göz atılabilir API oluşturucuyu kaldırmanız yeterlidir.

Genel olarak:

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

Görüntüleme bazında:

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

Kenara :

Çoğu durumda, API üzerinde çalışan herhangi bir geliştiriciye büyük bir yardımcı olduğu ve onlara başka türlü sahip olacaklarından daha fazla izin vermediği için , insanların her durumda göz atılabilir API'yi devre dışı bırakmayı seçmesinin utanç verici olduğunu düşünüyorum . Bazı durumlarda bunu yapmanın ticari nedenleri olabileceğini görebiliyorum , ancak genel olarak bunun çok büyük bir değer olduğunu düşünüyorum. Bununla birlikte, bazı durumlarda, herkese açık olmayan bir API'nin açığa çıkarmak istemeyebileceği ayrıntılar (özel eylemlerin adları gibi) gösterilebilir.

Göz atılabilir API oluşturucuyu geliştirmeyle sınırlama hakkında daha fazla ayrıntı için aşağıdaki yanıta da bakın .


33
it's a big aid to any developers working on the API. Geliştirme ve üretim için ayar dosyalarına sahip olmaları gerekmez mi? Geliştirme aşamasında, göz atılabilir API'yi etkinleştirin.
Jacob Valenta

11
@JacobValenta Bence Tom Christie, API'nizi kullanan üçüncü taraf geliştiricilerin göz atılabilir API'yi kullanabilmesi gerektiği anlamına geliyor.
Dustin Wyatt

1
Aynen, @DustinWyatt
Tom Christie'ye göre

7
@TomChristie Tom, benim durumumda görünüm düzeyi izinleri, yetkisiz kullanıcıların yeni kullanıcılar oluşturmasına izin verdiğim için Kullanıcılar görünümü dışında, yetkisiz kullanıcıların göz atılabilir api'de 401'den fazla bir şey görmesini engelliyor. Bu, HTML formunun, açığa çıkarmak istemediğim otomatik tamamlanan verilerle gösterilmesine neden oluyor. Yetkisiz kullanıcılar için özel bir şablon oluşturmayı engellemenin kolay bir yolu var mı?
jeffjv

1
Pek çok veya çoğu devlet müşterisinin, keşif yöntemlerinin (göz atılabilir REST API arayüzleri gibi) tamamen devre dışı bırakılmasını açıkça istemesini ekleyeceğimi düşündüm. Mantıklı olduğunu ya da doğru olduğunu söylemiyorum ... sadece öyle.
Ray Pendergraph

88

Bu soruya verilen kabul edilen cevap soruyu söylendiği gibi cevaplarken, eldeki asıl sorunu çözmediğini düşünüyorum.

Bu cevabın eksiksiz olması için, göz atılabilir HTML api'nin devre dışı bırakılması, aşağıdaki gibi oluşturucu sınıflarından kaldırılarak yapılır:

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

Ancak, sorunun ima ettiği asıl sorun, insanların kimlik doğrulaması olmadan API'ye gönderi yapabilmeleridir. Formu kaldırmak onu daha az belirgin hale getirse de, bu yanıt API uç noktalarını korumaz.

En azından birisi bu soruyu bulur ve API'yi kimliği doğrulanmamış veya yetkisiz POST gönderimlerine karşı korumaya çalışır; API İzinlerini değiştirmek isteyenler

Aşağıdakiler, kullanıcının kimliği doğrulanmadığı sürece tüm uç noktaları yalnızca okunacak şekilde ayarlayacaktır.

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

Kullanıcı oturum açmadıkça API'yi tamamen gizlemek isterseniz, kullanabilirsiniz IsAuthenticated.

Bilginize: Bu, izinlere yanıt verirken formu HTML göz atılabilir API'den de kaldıracaktır. Kimliği doğrulanmış bir kullanıcı giriş yaptığında, form tekrar kullanılabilir olacaktır.

Bonus Turu :

Yalnızca geliştiricideki göz atılabilir HTML API'sini etkinleştirin:

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
}

10
Bu, soruyu kabul edilen, en çok oylanan cevaptan daha doğrudan yanıtlar.
Turtles Are Cute,

Yerel ve üretim için ayrı yapılandırma dosyaları tutarsanız, bunu local.py ayarlar dosyanıza koyabilirsiniz (sadece yukarıdakileri bir REST_FRAMEWORK['DEFAULT_RENDERER_CLASSES'].append('rest_framework.renderers.BrowsableAPIRenderer')
tuple'dan

"Bu, izinlere yanıt verdiği için formu HTML göz atılabilir API'den de kaldıracaktır" cümlesi tam olarak doğru değildir. Hala görünür olacağı ve görünümün adını ifşa
edeceği

Form orada olmayacak. Görünüm olacak. İfade doğrudur @ user972014
Routhinator

3
import rest_framework

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

Bunu Settings.py hesabınıza eklemeniz yeterlidir, Browsable API'yi devre dışı bırakmalısınız!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.