Django-rest-Framework के व्यवस्थापक-शैली ब्राउज़ करने योग्य इंटरफ़ेस को कैसे अक्षम करें?


150

मैं django-rest-Framework का उपयोग कर रहा हूं । यह एक भयानक Django व्यवस्थापक शैली ब्राउज़ करने योग्य स्व-दस्तावेज़ीकरण API प्रदान करता है। लेकिन कोई भी उन पृष्ठों पर जा सकता है और डेटा (POST) को जोड़ने के लिए इंटरफ़ेस का उपयोग कर सकता है। मैं इसे कैसे निष्क्रिय कर सकता हूं?


हां, उपयोगकर्ता एपीआई का उपयोग कर सकते हैं। लेकिन मैं उनके लिए व्यवस्थापक-शैली ब्राउज़ करने योग्य पृष्ठ नहीं दिखाना चाहता।
फॉरेस्ट्स

जवाबों:


246

आपको केवल दृश्य के लिए समर्थित रेंडरर्स की अपनी सूची से ब्राउज़ करने योग्य API रेंडरर को निकालने की आवश्यकता है।

आम तौर पर:

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

प्रति-दृश्य आधार:

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

एक तरफ :

कई मामलों में मुझे लगता है कि यह शर्म की बात है कि लोग किसी भी मामले में ब्राउज़ करने योग्य API को अक्षम करने का चयन करेंगे, क्योंकि यह एपीआई पर काम करने वाले किसी भी डेवलपर्स के लिए एक बड़ी सहायता है, और यह उन्हें अधिक अनुमति नहीं देता है जो उनके पास अन्यथा होगा । मैं देख सकता हूं कि कुछ मामलों में ऐसा करने के व्यावसायिक कारण हो सकते हैं , लेकिन आमतौर पर मैं इसे एक बड़ी संपत्ति मानता हूं। हालाँकि, कुछ मामलों में ऐसे विवरण दिखाए जा सकते हैं (जैसे कि कस्टम क्रियाओं के नाम) जो कि एक गैर-सार्वजनिक एपीआई को उजागर नहीं करना चाहिए।

विकास के लिए ब्राउज़ करने योग्य API रेंडरर को प्रतिबंधित करने के बारे में अधिक विवरण के लिए नीचे दिए गए उत्तर को भी देखें ।


31
it's a big aid to any developers working on the API। क्या उनके पास विकास और उत्पादन के लिए सेटिंग्स फाइलें नहीं होनी चाहिए? विकास में ब्राउज़ करने योग्य API सक्षम करें।
याकूब वेलेंटा

11
@JacobValenta मुझे लगता है कि टॉम क्रिस्टी का मतलब है कि आपके एपीआई का उपयोग करने वाले तीसरे पक्ष के डेवलपर्स को ब्राउज़ करने योग्य एपीआई का उपयोग करने में सक्षम होना चाहिए।
डस्टिन व्याट

1
यप, @DustinWyatt के अनुसार
टॉम क्रिस्टी

7
@TomChristie टॉम, मेरे मामले में, दृश्य स्तर अनुमतियाँ अनधिकृत उपयोगकर्ताओं को कुछ भी अधिक देखने से रोक रही हैं, ताकि उपयोगकर्ताओं के दृश्य के अपवाद के साथ ब्राउज़ करने योग्य एपीआई में 401 हो क्योंकि मैं अनधिकृत POST को नए उपयोगकर्ता बनाने की अनुमति देता हूं। यह HTML फ़ॉर्म को स्वतः पूर्ण डेटा के साथ दिखाया जाता है जिसे मैं उजागर नहीं करना चाहता। क्या कस्टम टेम्पलेट बनाने के लिए अनधिकृत उपयोगकर्ताओं के लिए इसे रोकने का एक आसान तरीका है?
jeffjv

1
बस सोचा था कि मैं कई या अधिकांश सरकारी ग्राहकों को स्पष्ट रूप से खोज के तरीकों (जैसे ब्राउज़ करने योग्य REST API इंटरफेस) के लिए पूरी तरह से अक्षम होने के लिए कहूंगा। मैं यह नहीं कह रहा हूँ कि यह समझ में आता है या यह सही है ... यह सिर्फ है।
रे पेंडरग्राफ

74

जबकि इस प्रश्न का स्वीकृत उत्तर प्रश्न का उत्तर देता है क्योंकि यह शब्द था, मुझे लगता है कि यह वास्तविक मुद्दे को हल नहीं करता है।

इस उत्तर में पूर्णता के लिए, ब्राउज़ करने योग्य HTML एपीआई को अक्षम करना इसे रेंडरर वर्गों से हटाकर किया जाता है:

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

हालाँकि, वास्तविक समस्या यह है कि लोगों को प्रमाणीकरण के बिना एपीआई में पोस्ट करने में सक्षम होना चाहिए। प्रपत्र को हटाते समय यह कम स्पष्ट हो जाता है, यह उत्तर API समापन बिंदु की सुरक्षा नहीं करता है।

कम से कम, कोई व्यक्ति इस प्रश्न को पाता है और एपीआई को अनधिकृत, या अनधिकृत POST प्रस्तुतियाँ से बचाने के लिए देख रहा है; एपीआई अनुमतियाँ बदलने के लिए देख रहे हैं

निम्नलिखित सभी समापन बिंदुओं को केवल तब तक पढ़ा जाएगा जब तक कि उपयोगकर्ता प्रमाणित न हो जाए।

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

यदि आप पूरी तरह से एपीआई को छुपाना चाहते हैं जब तक कि उपयोगकर्ता लॉग इन न हो, आप भी उपयोग कर सकते हैं IsAuthenticated

FYI करें: यह HTML ब्राउज़ करने योग्य API से फ़ॉर्म को भी हटा देगा क्योंकि यह अनुमतियों के प्रति प्रतिक्रिया करता है। जब एक प्रमाणित उपयोगकर्ता लॉग इन करता है, तो फॉर्म फिर से उपलब्ध होगा।

बोनस दौर :

केवल देव में ब्राउज़ करने योग्य HTML API सक्षम करें:

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
}

7
यह सीधे स्वीकार किए गए, सबसे उत्थान वाले उत्तर की तुलना में अधिक प्रश्न का उत्तर देता है।
कछुए हैं प्यारा

यदि आप स्थानीय और उत्पादन के लिए अलग-अलग कॉन्फिग फाइल्स रखते हैं, तो आप इसे अपनी लोकल थिंकफॉक्स सेटिंग्स फाइल में डाल सकते हैं (सिर्फ एक ट्यूपल से लिस्ट में बदलाव करना सुनिश्चित करें):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',
     )
 }

बस इसे अपनी सेटिंग्स में जोड़ें, ब्राउज़ करने योग्य एपीआई को अक्षम करना चाहिए!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.