> For the complete documentation index, see [llms.txt](https://ilyachch.gitbook.io/django-rest-framework-russian-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ilyachch.gitbook.io/django-rest-framework-russian-documentation/overview/navigaciya-po-api/settings.md).

# Настройки

## Настройки

> Пространства имен - это отличная идея - давайте делать их больше!
>
> * [The Zen of Python](https://www.python.org/dev/peps/pep-0020/)

Конфигурация для DRF находится в едином пространстве имен в настройках Django под названием `REST_FRAMEWORK`.

Например, файл `settings.py` вашего проекта может содержать что-то вроде этого:

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

### Доступ к настройкам

Если вам необходимо получить доступ к значениям настроек API DRF в вашем проекте, вам следует использовать объект `api_settings`. Например.

```python
from rest_framework.settings import api_settings

print(api_settings.DEFAULT_AUTHENTICATION_CLASSES)
```

Объект `api_settings` будет проверять наличие любых пользовательских настроек и в противном случае возвращаться к значениям по умолчанию. Любая настройка, использующая строковые пути импорта для ссылки на класс, будет автоматически импортировать и возвращать класс, на который ссылается, вместо строкового литерала.

***

## API Reference

### Настройки политики API

*Следующие настройки управляют основными политиками API и применяются к каждому представлению `APIView` на основе класса или `@api_view` на основе функции.*

**DEFAULT\_RENDERER\_CLASSES**

Список или кортеж классов рендереров, определяющий набор рендереров по умолчанию, которые могут быть использованы при возврате объекта `Response`.

По умолчанию:

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

**DEFAULT\_PARSER\_CLASSES**

Список или кортеж классов парсеров, определяющий набор парсеров по умолчанию, используемых при обращении к свойству `request.data`.

По умолчанию:

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

**DEFAULT\_AUTHENTICATION\_CLASSES**

Список или кортеж классов аутентификации, определяющий набор аутентификаторов по умолчанию, используемых при обращении к свойствам `request.user` или `request.auth`.

По умолчанию:

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

**DEFAULT\_PERMISSION\_CLASSES**

Список или кортеж классов разрешений, который определяет набор разрешений по умолчанию, проверяемых при запуске представления. Разрешение должно быть предоставлено каждым классом в списке.

По умолчанию:

```python
[
    '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`, пагинация по умолчанию отключена. Дополнительное руководство по [установке](https://ilyachch.gitbook.io/django-rest-framework-russian-documentation/overview/navigaciya-po-api/pages/8fjZNPErRAc33iX6voCp#установка-стиля-пагинации) и [изменению](https://ilyachch.gitbook.io/django-rest-framework-russian-documentation/overview/navigaciya-po-api/pages/8fjZNPErRAc33iX6voCp#изменение-стиля-пагинации) стиля пагинации см. в документации по пагинации.

По умолчанию: `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` для неаутентифицированных запросов. (Если аутентификация полностью удалена, например, путем удаления `django.contrib.auth` из `INSTALLED_APPS`, установите `UNAUTHENTICATED_USER` в `None`).

По умолчанию: `django.contrib.auth.models.AnonymousUser`.

**UNAUTHENTICATED\_TOKEN**

Класс, который должен использоваться для инициализации `request.auth` для неаутентифицированных запросов.

По умолчанию: `Нет`

***

### Настройки тестов

*Следующие настройки управляют поведением APIRequestFactory и APIClient.*

**TEST\_REQUEST\_DEFAULT\_FORMAT**

Формат по умолчанию, который следует использовать при составлении тестовых запросов.

Он должен совпадать с форматом одного из классов рендереров в настройке `TEST_REQUEST_RENDERER_CLASSES`.

По умолчанию: `'multipart'`.

**TEST\_REQUEST\_RENDERER\_CLASSES**

Классы рендереров, которые поддерживаются при построении тестовых запросов.

Формат любого из этих классов рендереров может быть использован при построении тестового запроса, например: `client.post('/users', {'username': 'jamie'}, format='json')`.

По умолчанию:

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

***

### Элементы управления генерацией схемы

**SCHEMA\_COERCE\_PATH\_PK**

Если задано, то при генерации параметра пути к схеме идентификатор `'pk'` в URL conf сопоставляется с реальным именем поля. Обычно это `'id'`. Это дает более подходящее представление, поскольку "первичный ключ" - это деталь реализации, тогда как "идентификатор" - более общая концепция.

По умолчанию: `True`

**SCHEMA\_COERCE\_METHOD\_NAMES**

Если установлено, это используется для сопоставления внутренних имен методов набора представлений с именами внешних действий, используемых при генерации схемы. Это позволяет нам генерировать имена, более подходящие для внешнего представления, чем те, которые используются внутри кодовой базы.

По умолчанию: `{'retrieve': 'read', 'destroy': 'delete'}`

***

### Контроль типа содержимого

**URL\_FORMAT\_OVERRIDE**

Имя параметра URL, который можно использовать для переопределения стандартного поведения заголовка согласования содержимого `Accept`, используя параметр запроса `format=...` в URL запроса.

Например: `http://example.com/organizations/?format=csv`

Если значение этого параметра равно `None`, то переопределение формата URL будет отключено.

По умолчанию: `'format'`.

**FORMAT\_SUFFIX\_KWARG**

Имя параметра в URL conf, который может быть использован для обеспечения суффикса формата. Этот параметр применяется при использовании `format_suffix_patterns` для включения суффиксных шаблонов URL.

Например: `http://example.com/organizations.csv/`

По умолчанию: `'format'`.

***

### Форматирование даты и времени

*Следующие параметры используются для управления тем, как представления даты и времени могут быть разобраны и отображены.*

**DATETIME\_FORMAT**

Строка формата, которая должна использоваться по умолчанию для вывода полей сериализатора `DateTimeField`. Если `None`, то поля сериализатора `DateTimeField` будут возвращать объекты Python `datetime`, а кодировка времени будет определяться рендерером.

Может быть любым из `None`, `'iso-8601'` или строкой Python [strftime format](https://docs.python.org/3/library/time.html#time.strftime).

По умолчанию: `'iso-8601'`.

**DATETIME\_INPUT\_FORMATS**

Список форматных строк, которые должны использоваться по умолчанию при разборе входных данных для полей сериализатора `DateTimeField`.

Может быть списком, включающим строку `'iso-8601'` или строки Python [strftime format](https://docs.python.org/3/library/time.html#time.strftime).

По умолчанию: `['iso-8601']`.

**DATE\_FORMAT**

Строка формата, которая должна использоваться по умолчанию для вывода полей сериализатора `DateField`. Если `None`, то поля сериализатора `DateField` будут возвращать объекты Python `date`, а кодировка даты будет определяться рендерером.

Может быть любым из `None`, `'iso-8601'` или строкой Python [strftime format](https://docs.python.org/3/library/time.html#time.strftime).

По умолчанию: `'iso-8601'`.

**DATE\_INPUT\_FORMATS**

Список форматных строк, которые должны использоваться по умолчанию при разборе входных данных для полей сериализатора `DateField`.

Может быть списком, включающим строку `'iso-8601'` или строки Python [strftime format](https://docs.python.org/3/library/time.html#time.strftime).

По умолчанию: `['iso-8601']`.

**TIME\_FORMAT**

Строка формата, которая должна использоваться по умолчанию для вывода полей сериализатора `TimeField`. Если `None`, то поля сериализатора `TimeField` будут возвращать объекты Python `time`, а кодировка времени будет определяться рендерером.

Может быть любым из `None`, `'iso-8601'` или строкой Python [strftime format](https://docs.python.org/3/library/time.html#time.strftime).

По умолчанию: `'iso-8601'`.

**TIME\_INPUT\_FORMATS**

Список форматных строк, которые должны использоваться по умолчанию при разборе входных данных для полей сериализатора `TimeField`.

Может быть списком, включающим строку `'iso-8601'` или строки Python [strftime format](https://docs.python.org/3/library/time.html#time.strftime).

По умолчанию: `['iso-8601']`.

***

### Кодировки

**UNICODE\_JSON**

Если установлено значение `True`, ответы JSON будут разрешать использование символов юникода в ответах. Например:

```python
{"unicode black star":"★"}
```

Если установлено значение `False`, в ответах JSON будут экранироваться неасксиальные символы, как показано ниже:

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

Оба стиля соответствуют [RFC 4627](https://www.ietf.org/rfc/rfc4627.txt) и являются синтаксически правильным JSON. Стиль unicode предпочтительнее, так как он более удобен при проверке ответов API.

По умолчанию: `True`

**COMPACT\_JSON**

Если установлено значение `True`, ответы JSON будут возвращать компактные представления, без пробелов после символов `':'` и `','`. Например:

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

Если установлено значение `False`, ответы JSON будут возвращать более подробное представление, как показано ниже:

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

По умолчанию возвращаются минифицированные ответы, в соответствии с [Heroku's API design guidelines](https://github.com/interagent/http-api-design#keep-json-minified-in-all-responses).

По умолчанию: `True`

**STRICT\_JSON**

Если установлено значение `True`, при рендеринге и разборе JSON будет использоваться только синтаксически правильный JSON, создавая исключение для расширенных значений float (`nan`, `inf`, `inf`), принимаемых модулем Python `json`. Это рекомендуемая настройка, так как эти значения обычно не поддерживаются. Например, ни Javascript `JSON.Parse`, ни PostgreSQL тип данных JSON не принимают эти значения.

Если установлено значение `False`, рендеринг и парсинг JSON будут разрешительными. Однако эти значения все еще недействительны и должны быть специально обработаны в вашем коде.

По умолчанию: `True`

**COERCE\_DECIMAL\_TO\_STRING**

При возврате десятичных объектов в представлениях API, которые не поддерживают собственный десятичный тип, обычно лучше всего возвращать значение в виде строки. Это позволяет избежать потери точности, которая происходит при двоичной реализации с плавающей запятой.

Если установлено значение `True`, сериализатор класса `DecimalField` будет возвращать строки вместо объектов `Decimal`. Если установлено значение `False`, сериализаторы будут возвращать объекты `Decimal`, которые кодировщик JSON по умолчанию будет возвращать как float.

По умолчанию: `True`

***

### Названия и описания представлений

*Следующие настройки используются для создания названий и описаний представлений, которые используются в ответах на запросы `OPTIONS` и в API для просмотра.*

**VIEW\_NAME\_FUNCTION**

Строка, представляющая функцию, которая должна использоваться при генерации имен представлений.

Это должна быть функция со следующей сигнатурой:

```python
view_name(self)
```

* `self`: Экземпляр представления. Обычно функция name проверяет имя класса при генерации описательного имени, обращаясь к `self.__class__.__name__`.

Если экземпляр представления наследует `ViewSet`, он может быть инициализирован с несколькими необязательными аргументами:

* `name`: Имя, явно предоставленное представлению в наборе представлений. Обычно это значение должно использоваться как есть, если оно предоставлено.
* `suffix`: Текст, используемый для различения отдельных представлений в наборе представлений. Этот аргумент является взаимоисключающим с `name`.
* `detail`: Булево значение, отличающее индивидуальное представление в наборе представлений как "список" или "подробное представление".

По умолчанию: `'rest_framework.views.get_view_name'`.

**VIEW\_DESCRIPTION\_FUNCTION**

Строка, представляющая функцию, которая должна использоваться при генерации описаний представлений.

Этот параметр может быть изменен для поддержки стилей разметки, отличных от стандартного markdown. Например, вы можете использовать его для поддержки разметки `rst` в ваших документах представления, выводимых в Web-интерфейсе API.

Это должна быть функция со следующей сигнатурой:

```python
view_description(self, html=False)
```

* `self`: Экземпляр представления. Обычно функция описания проверяет строку документа класса при генерации описания, обращаясь к `self.__class__.__doc__`.
* `html`: Булево значение, указывающее, требуется ли вывод HTML. `True` используется в API для просмотра, а `False` - при генерации ответов `OPTIONS`.

Если экземпляр представления наследует `ViewSet`, он может быть инициализирован с несколькими необязательными аргументами:

* `description`: Описание, явно предоставленное представлению в наборе представлений. Обычно оно устанавливается дополнительными `действиями` набора представлений и должно использоваться как есть.

По умолчанию: `'rest_framework.views.get_view_description'`.

### HTML Select Field cutoffs

Глобальные настройки для [выбора отсечений полей для визуализации реляционных полей](https://ilyachch.gitbook.io/django-rest-framework-russian-documentation/overview/navigaciya-po-api/pages/-MK2C2of91YL_ZD8l982#выберите-отсечение-полей) в Web-интерфейсе API.

**HTML\_SELECT\_CUTOFF**

Глобальная настройка для значения `html_cutoff`. Должно быть целое число.

По умолчанию: `1000`

**HTML\_SELECT\_CUTOFF\_TEXT**

Строка, представляющая глобальную настройку для `html_cutoff_text`.

По умолчанию: `'More than {count} items...'`.

***

### Разные настройки

**EXCEPTION\_HANDLER**

Строка, представляющая функцию, которая должна быть использована при возврате ответа для любого данного исключения. Если функция возвращает `None`, будет выдана ошибка 500.

Этот параметр может быть изменен для поддержки ответов на ошибки, отличных от ответов по умолчанию `{"detail": "Сбой..."}}` ответов. Например, вы можете использовать его для предоставления ответов API типа `{"errors": [{"message": "Failure...", "code": ""} ...]}`.

Это должна быть функция со следующей сигнатурой:

```python
exception_handler(exc, context)
```

* `exc`: Исключение.

По умолчанию: `'rest_framework.views.exception_handler'`.

**NON\_FIELD\_ERRORS\_KEY**

Строка, представляющая ключ, который следует использовать для ошибок сериализатора, которые не относятся к конкретному полю, а являются общими ошибками.

По умолчанию: `'non_field_errors'`.

**URL\_FIELD\_NAME**

Строка, представляющая ключ, который должен использоваться для полей URL, генерируемых `HyperlinkedModelSerializer`.

По умолчанию: `'url'`

**NUM\_PROXIES**

Целое число, равное 0 или более, которое может использоваться для указания количества прокси-серверов приложений, за которыми работает API. Это позволяет дросселированию более точно определять IP-адреса клиентов. Если установлено значение `None`, то классы дросселирования будут использовать менее строгое сопоставление IP-адресов.

По умолчанию: `None`
