web-dev-qa-db-ja.com

Django-rest-frameworkの管理スタイルの閲覧可能なインターフェースを無効にする方法は?

Django-rest-framework を使用しています。素晴らしいDjango adminスタイルの閲覧可能な自己文書化API。

129
iForests

この質問に対する受け入れられた答えは、言葉どおりに質問に答えますが、実際の問題を解決するものではないと感じています。

この答えを完全にするために、参照可能なHTML APIを無効にするには、次のようにレンダラークラスから削除します。

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

ただし、質問が暗示している実際の問題は、認証なしでAPIに投稿できることです。フォームを削除するとわかりにくくなりますが、この回答はAPIエンドポイントを保護しません。

少なくとも、誰かがこの質問を見つけて、認証されていない、または不正なAPIを保護しようとしていますPOST提出; API Permissions

以下は、ユーザーが認証されない限り、すべてのエンドポイントを読み取り専用に設定します。

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

ユーザーがログインしていない限り、APIを完全に非表示にする場合は、IsAuthenticatedも使用できます。

参考までに、これは権限に応答するときにHTML参照可能APIからフォームを削除します。認証されたユーザーがログインすると、フォームが再び使用可能になります。

ボーナスラウンド

Devで参照可能な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
}
45
Routhinator
import rest_framework

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

これをSettings.pyに追加するだけで、Browsable APIが無効になります!

2
Syed Faizan

設定の'rest_framework.renderers.BrowsableAPIRenderer',から'DEFAULT_RENDERER_CLASSES'を削除します

0
A.Raouf