django-rest-frameworkの管理者スタイルの参照可能なインターフェイスを無効にする方法は?


150

私はdjango-rest-frameworkを使用しています。素晴らしいDjango管理スタイルのブラウズ可能な自己文書化APIを提供します。しかし、誰でもこれらのページにアクセスし、インターフェースを使用してデータを追加できます(POST)。どうすれば無効にできますか?


はい、ユーザーはログインしてAPIを使用できます。しかし、私は彼らに管理者スタイルの閲覧可能なページを見せたくありません。
iForests

回答:


246

ビューでサポートされているレンダラーのリストから、参照可能なAPIレンダラーを削除するだけです。

一般的に:

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

ビュー単位:

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

余談

多くの場合、閲覧可能なAPIを無効にすることを選択するのは残念なことです。これ、APIに取り組んでいる開発者にとって大きな助けとなり、それ以外の場合に許可されているよりも多くの権限が付与されないためです。私はでそうするためのビジネス上の理由があるかもしれないことを見ることができますいくつかの例が、一般的に、私はそれの巨大な資産を検討したいです。ただし、非公開APIが公開したくない詳細(カスタムアクションの名前など)が表示される場合もあります。

参照可能なAPIレンダラーを開発に制限する方法の詳細については、以下の回答も参照してください。


31
it's a big aid to any developers working on the API。開発用と本番用の設定ファイルを用意する必要はありませんか?開発中は、ブラウズ可能なAPIを有効にします。
Jacob Valenta

11
@JacobValenta トムクリスティーは、APIを使用するサードパーティの開発者が参照可能なAPIを使用できる必要があることを意味すると思います。
ダスティンワイアット

1
うん、@ DustinWyattによる
Tom Christie

7
@TomChristie Tom、私の場合、ビューレベルの権限により、権限のないPOSTで新しいユーザーを作成できるため、権限のないユーザーがブラウザブルAPIで401を超えるものを閲覧できないようにしています。これにより、公開したくないオートコンプリートデータがHTMLフォームに表示されます。カスタムテンプレートを作成することなく、権限のないユーザーがこれを防ぐ簡単な方法はありますか?
jeffjv 2015年

1
多くのまたはほとんどの政府機関の顧客が、発見の方法(ブラウズ可能なREST APIインターフェースなど)を完全に無効にするように明示的に要求することを追加したいと思いました。それが理にかなっているとか、それが正しいとか言っているのではありません...
レイペンダーグラフ、2015年

74

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

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

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

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

少なくとも、誰かがこの質問を見つけて、未認証または無許可のPOST送信からAPIを保護しようとしています。API権限を変更しようとしています

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

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
}

7
これは、受け入れられ、最も支持されている回答よりも直接質問に回答します。
カメはかわいい

あなたは、ローカルおよび生産のために別々の設定ファイルを保存する場合、あなたは自分のlocal.py設定ファイルでこれを置くことができます(リストだけにタプルから上に変更してください):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',
     )
 }

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.