settings.py

設定

名前空間は素晴らしいアイデアです - もっと活用しましょう!

The Zen of Python

REST frameworkの設定は、REST_FRAMEWORKという単一のDjango設定の中にすべて名前空間化されています。

例えば、プロジェクトのsettings.pyファイルには次のようなものが含まれる場合があります。

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
    ],
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
    ]
}

設定へのアクセス

プロジェクトでREST frameworkのAPI設定の値にアクセスする必要がある場合は、api_settingsオブジェクトを使用する必要があります。例えば。

from rest_framework.settings import api_settings

print(api_settings.DEFAULT_AUTHENTICATION_CLASSES)

api_settingsオブジェクトは、ユーザー定義の設定を確認し、そうでない場合はデフォルト値に戻ります。クラスを参照する文字列インポートパスを使用する設定は、文字列リテラルではなく、参照されたクラスを自動的にインポートして返します。


APIリファレンス

APIポリシー設定

次の設定は基本的なAPIポリシーを制御し、すべてのAPIViewクラスベースビューまたは@api_view関数ベースビューに適用されます。

DEFAULT_RENDERER_CLASSES

Responseオブジェクトを返す際に使用できるレンダラーのデフォルトセットを決定する、レンダラークラスのリストまたはタプル。

デフォルト

[
    'rest_framework.renderers.JSONRenderer',
    'rest_framework.renderers.BrowsableAPIRenderer',
]

DEFAULT_PARSER_CLASSES

request.dataプロパティにアクセスする際に使用されるパーサーのデフォルトセットを決定する、パーサークラスのリストまたはタプル。

デフォルト

[
    'rest_framework.parsers.JSONParser',
    'rest_framework.parsers.FormParser',
    'rest_framework.parsers.MultiPartParser'
]

DEFAULT_AUTHENTICATION_CLASSES

request.userまたはrequest.authプロパティにアクセスする際に使用されるオーセンティケーターのデフォルトセットを決定する、認証クラスのリストまたはタプル。

デフォルト

[
    'rest_framework.authentication.SessionAuthentication',
    'rest_framework.authentication.BasicAuthentication'
]

DEFAULT_PERMISSION_CLASSES

ビューの開始時にチェックされるパーミッションのデフォルトセットを決定する、パーミッションクラスのリストまたはタプル。リスト内のすべてのクラスによってパーミッションが許可されている必要があります。

デフォルト

[
    'rest_framework.permissions.AllowAny',
]

DEFAULT_THROTTLE_CLASSES

ビューの開始時にチェックされるスロットルのデフォルトセットを決定する、スロットルクラスのリストまたはタプル。

デフォルト: []

DEFAULT_CONTENT_NEGOTIATION_CLASS

着信リクエストに応じてレスポンスのレンダラーを選択する方法を決定する、コンテンツネゴシエーションクラス。

デフォルト: 'rest_framework.negotiation.DefaultContentNegotiation'

DEFAULT_SCHEMA_CLASS

スキーマ生成に使用されるビューインスペクタークラス。

デフォルト: 'rest_framework.schemas.openapi.AutoSchema'


汎用ビュー設定

次の設定は、汎用クラスベースビューの動作を制御します。

DEFAULT_FILTER_BACKENDS

汎用フィルタリングに使用されるフィルタバックエンドクラスのリスト。Noneに設定されている場合、汎用フィルタリングは無効になります。

DEFAULT_PAGINATION_CLASS

クエリセットのページネーションに使用するデフォルトクラス。Noneに設定されている場合、デフォルトでページネーションは無効になります。設定変更に関するページネーションのドキュメントを参照してください。

デフォルト: None

PAGE_SIZE

ページネーションに使用するデフォルトのページサイズ。Noneに設定されている場合、デフォルトでページネーションは無効になります。

デフォルト: None

SEARCH_PARAM

SearchFilterで使用される検索語を指定するために使用できるクエリパラメータの名前。

デフォルト: search

ORDERING_PARAM

OrderingFilterによって返される結果の順序を指定するために使用できるクエリパラメータの名前。

デフォルト: ordering


バージョン管理設定

DEFAULT_VERSION

バージョン情報が存在しない場合にrequest.versionに使用される値。

デフォルト: None

ALLOWED_VERSIONS

設定されている場合、この値はバージョン管理スキームによって返されるバージョンのセットを制限し、提供されたバージョンがこのセットにない場合はエラーが発生します。

デフォルト: None

VERSION_PARAM

メディアタイプまたはURLクエリパラメータなど、任意のバージョン管理パラメータに使用される文字列。

デフォルト: 'version'

DEFAULT_VERSIONING_CLASS

使用するデフォルトのバージョン管理スキーム。

デフォルト: None


認証設定

次の設定は、認証されていないリクエストの動作を制御します。

UNAUTHENTICATED_USER

認証されていないリクエストに対してrequest.userを初期化するために使用されるクラス。(認証を完全に削除する場合、例えばINSTALLED_APPSからdjango.contrib.authを削除する場合は、UNAUTHENTICATED_USERNoneに設定します。)

デフォルト: django.contrib.auth.models.AnonymousUser

UNAUTHENTICATED_TOKEN

認証されていないリクエストに対してrequest.authを初期化するために使用されるクラス。

デフォルト: None


テスト設定

次の設定は、APIRequestFactoryとAPIClientの動作を制御します。

TEST_REQUEST_DEFAULT_FORMAT

テストリクエストを行う際に使用するデフォルトのフォーマット。

これは、TEST_REQUEST_RENDERER_CLASSES設定のレンダラークラスのいずれかのフォーマットと一致する必要があります。

デフォルト: 'multipart'

TEST_REQUEST_RENDERER_CLASSES

テストリクエストを作成する際にサポートされるレンダラークラス。

これらのレンダラークラスのいずれかのフォーマットは、テストリクエストを作成する際に使用できます。例えば: client.post('/users', {'username': 'jamie'}, format='json')

デフォルト

[
    'rest_framework.renderers.MultiPartRenderer',
    'rest_framework.renderers.JSONRenderer'
]

スキーマ生成制御

SCHEMA_COERCE_PATH_PK

設定されている場合、これはスキーマパスパラメータを生成する際に、URLコンフィグの'pk'識別子を実際のフィールド名にマッピングします。通常これは'id'になります。「主キー」は実装の詳細であるのに対し、「識別子」はより一般的な概念であるため、より適切な表現になります。

デフォルト: True

SCHEMA_COERCE_METHOD_NAMES

設定されている場合、これは内部のviewsetメソッド名を、スキーマ生成で使用される外部アクション名にマッピングするために使用されます。これにより、コードベース内部で使用されているものよりも外部表現に適した名前を生成できます。

デフォルト: {'retrieve': 'read', 'destroy': 'delete'}


コンテンツタイプ制御

URL_FORMAT_OVERRIDE

リクエストURLでformat=…クエリパラメータを使用することにより、デフォルトのコンテンツネゴシエーションAcceptヘッダーの動作をオーバーライドするために使用できるURLパラメータの名前。

例えば: http://example.com/organizations/?format=csv

この設定の値がNoneの場合、URLフォーマットのオーバーライドは無効になります。

デフォルト: 'format'

FORMAT_SUFFIX_KWARG

サフィックス付きURLパターンを含めるためにformat_suffix_patternsを使用する場合に、フォーマットサフィックスを提供するためにURLコンフィグで使用できるパラメータの名前。

例えば: http://example.com/organizations.csv/

デフォルト: 'format'


日付と時刻のフォーマット

次の設定は、日付と時刻の表現をどのように解析およびレンダリングするかを制御するために使用されます。

DATETIME_FORMAT

DateTimeFieldシリアライザーフィールドの出力をレンダリングするためにデフォルトで使用されるフォーマット文字列。Noneの場合、DateTimeFieldシリアライザーフィールドはPythonのdatetimeオブジェクトを返し、datetimeエンコーディングはレンダラーによって決定されます。

None'iso-8601'、またはPythonのstrftimeフォーマット文字列のいずれかになります。

デフォルト: 'iso-8601'

DATETIME_INPUT_FORMATS

DateTimeFieldシリアライザーフィールドへの入力を解析するためにデフォルトで使用されるフォーマット文字列のリスト。

文字列'iso-8601'またはPythonのstrftimeフォーマット文字列を含むリストになります。

デフォルト: ['iso-8601']

DATE_FORMAT

DateFieldシリアライザーフィールドの出力をレンダリングするためにデフォルトで使用されるフォーマット文字列。Noneの場合、DateFieldシリアライザーフィールドはPythonのdateオブジェクトを返し、日付エンコーディングはレンダラーによって決定されます。

None'iso-8601'、またはPythonのstrftimeフォーマット文字列のいずれかになります。

デフォルト: 'iso-8601'

DATE_INPUT_FORMATS

DateFieldシリアライザーフィールドへの入力を解析するためにデフォルトで使用されるフォーマット文字列のリスト。

文字列'iso-8601'またはPythonのstrftimeフォーマット文字列を含むリストになります。

デフォルト: ['iso-8601']

TIME_FORMAT

TimeFieldシリアライザーフィールドの出力をレンダリングするためにデフォルトで使用されるフォーマット文字列。Noneの場合、TimeFieldシリアライザーフィールドはPythonのtimeオブジェクトを返し、時間エンコーディングはレンダラーによって決定されます。

None'iso-8601'、またはPythonのstrftimeフォーマット文字列のいずれかになります。

デフォルト: 'iso-8601'

TIME_INPUT_FORMATS

TimeFieldシリアライザーフィールドへの入力を解析するためにデフォルトで使用されるフォーマット文字列のリスト。

文字列'iso-8601'またはPythonのstrftimeフォーマット文字列を含むリストになります。

デフォルト: ['iso-8601']


エンコーディング

UNICODE_JSON

Trueに設定されている場合、JSONレスポンスはレスポンスにUnicode文字を許可します。例えば

{"unicode black star":"★"}

Falseに設定されている場合、JSONレスポンスは非ASCII文字をエスケープします。例えば

{"unicode black star":"\u2605"}

どちらのスタイルもRFC 4627に準拠しており、構文的に有効なJSONです。Unicodeスタイルは、APIレスポンスを検査する際に、よりユーザーフレンドリーであるため推奨されます。

デフォルト: True

COMPACT_JSON

Trueに設定されている場合、JSONレスポンスはコンパクトな表現を返し、':'','文字の後にスペースがありません。例えば

{"is_admin":false,"email":"jane@example"}

Falseに設定されている場合、JSONレスポンスは少し冗長な表現を返します。例えば

{"is_admin": false, "email": "jane@example"}

デフォルトのスタイルは、HerokuのAPI設計ガイドラインに従って、ミニファイドなレスポンスを返すことです。

デフォルト: True

STRICT_JSON

Trueに設定されている場合、JSONのレンダリングと解析は構文的に有効なJSONのみを観察し、Pythonのjsonモジュールで受け入れられる拡張浮動小数点値(naninf-inf)に対して例外を発生させます。これらの値は一般的にサポートされていないため、これが推奨設定です。例えば、JavascriptのJSON.ParseやPostgreSQLのJSONデータ型はこれらの値を受け入れません。

Falseに設定されている場合、JSONのレンダリングとパースは寛容になります。ただし、これらの値は依然として無効であり、コードで特別な処理が必要になります。

デフォルト: True

COERCE_DECIMAL_TO_STRING

ネイティブのdecimal型をサポートしていないAPI表現でdecimalオブジェクトを返す場合、通常は文字列として値を返すのが最善です。これにより、バイナリ浮動小数点実装で発生する精度の損失を回避できます。

Trueに設定されている場合、シリアライザのDecimalFieldクラスはDecimalオブジェクトではなく文字列を返します。Falseに設定されている場合、シリアライザはDecimalオブジェクトを返し、デフォルトのJSONエンコーダはそれを浮動小数点数として返します。

デフォルト: True


ビュー名と説明

以下の設定は、OPTIONSリクエストへのレスポンスで使用されるビュー名と説明、およびブラウザブルAPIで使用されるビュー名と説明を生成するために使用されます。

VIEW_NAME_FUNCTION

ビュー名の生成に使用される関数を表す文字列。

この関数は、以下のシグネチャを持つ必要があります。

view_name(self)
  • self: ビューインスタンス。通常、名前関数は、self.__class__.__name__にアクセスすることで、クラス名を参照して記述的な名前を生成します。

ビューインスタンスがViewSetを継承している場合、いくつかのオプションの引数で初期化されている可能性があります。

  • name: ビューセット内のビューに明示的に指定された名前。通常、この値は提供されたまま使用されます。
  • suffix: ビューセット内の個々のビューを区別するために使用されるテキスト。この引数はnameと相互に排他的です。
  • detail: ビューセット内の個々のビューを「リスト」ビューと「詳細」ビューのいずれかとして区別するブール値。

デフォルト: 'rest_framework.views.get_view_name'

VIEW_DESCRIPTION_FUNCTION

ビューの説明の生成に使用される関数を表す文字列。

この設定を変更して、デフォルトのマークダウン以外のマークアップスタイルをサポートできます。たとえば、ブラウザブルAPIで出力されるビューのdocstringでrstマークアップをサポートするために使用できます。

この関数は、以下のシグネチャを持つ必要があります。

view_description(self, html=False)
  • self: ビューインスタンス。通常、説明関数は、self.__class__.__doc__にアクセスすることで、クラスのdocstringを参照して説明を生成します。
  • html: HTML出力が要求されるかどうかを示すブール値。ブラウザブルAPIで使用される場合はTrueOPTIONSレスポンスの生成で使用される場合はFalse

ビューインスタンスがViewSetを継承している場合、いくつかのオプションの引数で初期化されている可能性があります。

  • description: ビューセット内のビューに明示的に指定された説明。通常、これは追加のビューセットactionによって設定され、そのまま使用されます。

デフォルト: 'rest_framework.views.get_view_description'

HTMLセレクトフィールドの切り捨て

ブラウザブルAPIでリレーショナルフィールドをレンダリングするためのセレクトフィールドのカットオフに関するグローバル設定。

HTML_SELECT_CUTOFF

html_cutoff値のグローバル設定。整数である必要があります。

デフォルト: 1000

HTML_SELECT_CUTOFF_TEXT

html_cutoff_textのグローバル設定を表す文字列。

デフォルト: "More than {count} items..."


その他の設定

EXCEPTION_HANDLER

特定の例外に対するレスポンスを返す際に使用される関数を表す文字列。関数がNoneを返す場合、500エラーが発生します。

この設定を変更して、デフォルトの{"detail": "Failure..."}レスポンス以外のエラーレスポンスをサポートできます。たとえば、{"errors": [{"message": "Failure...", "code": ""} ...]}のようなAPIレスポンスを提供するために使用できます。

この関数は、以下のシグネチャを持つ必要があります。

exception_handler(exc, context)
  • exc: 例外。

デフォルト: 'rest_framework.views.exception_handler'

NON_FIELD_ERRORS_KEY

特定のフィールドではなく、一般的なエラーであるシリアライザエラーに使用されるキーを表す文字列。

デフォルト: 'non_field_errors'

URL_FIELD_NAME

HyperlinkedModelSerializerによって生成されるURLフィールドに使用されるキーを表す文字列。

デフォルト: 'url'

NUM_PROXIES

APIが動作しているアプリケーションプロキシの数を指定するために使用できる0以上の整数。これにより、クライアントのIPアドレスをより正確に識別するためのスロットリングが可能になります。Noneに設定されている場合、スロットルクラスではより緩やかなIPマッチングが使用されます。

デフォルト: None