# Настройки

## Настройки

> Пространства имен - это отличная идея - давайте делать их больше!
>
> * [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`


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ilyachch.gitbook.io/django-rest-framework-russian-documentation/overview/navigaciya-po-api/settings.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
