> 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/readme.md).

# Django REST framework

![Logo by Jake 'Sid' Smith](https://github.com/encode/django-rest-framework/raw/master/docs/img/logo.png)

Django REST framework - это мощный и гибкий набор инструментов для создания Web API.

Некоторые причины, по которым вы можете захотеть использовать REST framework:

* Web-интерфейс API - огромный выигрыш в удобстве использования для ваших разработчиков.
* [Политики аутентификации](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/authentication.md), включая пакеты для [OAuth1a](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/authentication.md#django-rest-framework-oauth) и [OAuth2](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/authentication.md#django-oauth-toolkit).
* [Сериализация](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/serializers.md), поддерживающая как [ORM](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/serializers.md#modelserializer), так и [non-ORM](https://ilyachch.gitbook.io/django-rest-framework-russian-documentation/overview/pages/-LegWRmrYTxtd2fN1kwI#сериализаторы) источники данных.
* Настраивается все - просто используйте [обычные представления на основе функций](https://github.com/ilyachch/django-rest-framework-rusdoc/blob/master/api-guide/views/README.md#Представления-на-основе-функций), если вам не нужны [более](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/generic-views.md) [мощные](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/viewsets.md) [возможности](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/routers.md).
* Обширная документация и [отличная поддержка сообщества](https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework).
* Используется и пользуется доверием всемирно известных компаний, включая [Mozilla](https://www.mozilla.org/en-us/about/), [Red Hat](https://www.redhat.com/), [Heroku](https://www.heroku.com/) и [Eventbrite](https://www.eventbrite.co.uk/about/).

***

## Требования

REST framework требует следующего:

* Django (4.2, 5.0)
* Python (3.8, 3.9, 3.10, 3.11, 3.12)

Мы **настоятельно рекомендуем** и официально поддерживаем только последние выпуски патчей каждой версии Python и Django.

Следующие пакеты являются необязательными:

* [PyYAML](https://pypi.org/project/pyyaml/), [uritemplate](https://pypi.org/project/uritemplate/) (5.1+, 3.0.0+) - Поддержка генерации схем.
* [Markdown](https://pypi.org/project/markdown/) (3.3.0+) - Поддержка Markdown для Web-интерфейса API.
* [Pygments](https://pypi.org/project/pygments/) (2.7.0+) - Добавление подсветки синтаксиса в обработку Markdown.
* [django-filter](https://pypi.org/project/django-filter/) (1.0.1+) - Поддержка фильтрации.
* [django-guardian](https://github.com/django-guardian/django-guardian) (1.1.1+) - Поддержка разрешений на уровне объектов.

## Установка

Установите с помощью `pip`, включая все дополнительные пакеты, которые вы хотите...

```bash
pip install djangorestframework
pip install markdown       # Markdown support for the browsable API.
pip install django-filter  # Filtering support
```

...или клонируйте проект с github.

```bash
git clone https://github.com/encode/django-rest-framework
```

Добавьте `'rest_framework'` в настройку `INSTALLED_APPS`.

```python
INSTALLED_APPS = [
    ...
    'rest_framework',
]
```

Если вы планируете использовать Web-интерфейс API, вы, вероятно, также захотите добавить представления входа и выхода из системы REST framework. Добавьте следующее в ваш корневой файл `urls.py`.

```python
urlpatterns = [
    ...
    path('api-auth/', include('rest_framework.urls'))
]
```

Обратите внимание, что путь URL может быть любым, какой вы захотите.

## Пример

Давайте рассмотрим быстрый пример использования REST-фреймворка для создания простого API с поддержкой модели.

Мы создадим API с функцией чтения-записи для доступа к информации о пользователях нашего проекта.

Все глобальные настройки для API REST-фреймворка хранятся в одном конфигурационном словаре с именем `REST_FRAMEWORK`. Начните с добавления следующих параметров в модуль `settings.py`:

```python
REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ]
}
```

Не забудьте убедиться, что вы также добавили `rest_framework` в `INSTALLED_APPS`.

Теперь мы готовы к созданию нашего API. Вот корневой модуль нашего проекта `urls.py`:

```python
from django.urls import path, include
from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets

# Serializers define the API representation.
class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ['url', 'username', 'email', 'is_staff']

# ViewSets define the view behavior.
class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'users', UserViewSet)

# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
```

Теперь вы можете открыть API в браузере по адресу <http://127.0.0.1:8000/> и просмотреть новых "пользователей" API. Если вы используете элемент управления входом в систему в правом верхнем углу, вы также сможете добавлять, создавать и удалять пользователей из системы.

## Быстрый старт

Не можете дождаться начала работы? Руководство [quickstart](/django-rest-framework-russian-documentation/overview/quickstart.md) - это самый быстрый способ начать работу и создавать API с помощью REST framework.

## Руководство

Руководство проведет вас через все этапы настройки DRF. Это займет не очень много времени, однако вы получите полное понимание того, как все компоненты работают друг с другом и данное руководство крайне рекомендовано к прочтению.

* [Сериализация](/django-rest-framework-russian-documentation/overview/quickstart/1-serialization.md)
* [Запросы-ответы](/django-rest-framework-russian-documentation/overview/quickstart/2-requests-and-responses.md)
* [Представления-классы](/django-rest-framework-russian-documentation/overview/quickstart/3-class-based-views.md)
* [Аутентификация/права доступа](/django-rest-framework-russian-documentation/overview/quickstart/4-authentication-and-permissions.md)
* [Отношения и связи](/django-rest-framework-russian-documentation/overview/quickstart/5-relationships-and-hyperlinked-apis.md)
* [Наборы представлений и роутеры](/django-rest-framework-russian-documentation/overview/quickstart/6-viewsets-and-routers.md)

Так же есть пример работающего API законченного руководства для тестовых целей, [доступен здесь](http://restframework.herokuapp.com/).

## Навигатор по API

Навигатор по API - исчерпывающее руководство по всему функционалу, предоставляемому DRF.

* [Запросы](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/requests.md)
* [Ответы](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/responses.md)
* [Представления](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/views.md)
* [Общие представления](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/generic-views.md)
* [Viewsets](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/viewsets.md)
* [Маршрутизаторы](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/routers.md)
* [Парсеры](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/parsers.md)
* [Рендереры](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/renderers.md)
* [Сериализаторы](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/serializers.md)
* [Поля сериализатора](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/fields.md)
* [Отношения сериализаторов](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/relations.md)
* [Валидаторы](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/validators.md)
* [Аутентификация](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/authentication.md)
* [Разрешения](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/permissions.md)
* [Кэширование](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/caching.md)
* [Дросселирование](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/throttling.md)
* [Фильтрация](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/filtering.md)
* [Пагинация](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/pagination.md)
* [Версионирование](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/versioning.md)
* [Согласование контента](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/content-negotiation.md)
* [Метаданные](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/metadata.md)
* [Schemas](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/schemas.md)
* [Cуффиксы формата](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/format-suffixes.md)
* [Возвращение URL-адресов](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/reverse.md)
* [Исключения](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/exceptions.md)
* [Коды состояния](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/status-codes.md)
* [Тестирование](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/testing.md)
* [Настройки](/django-rest-framework-russian-documentation/overview/navigaciya-po-api/settings.md)

## Статьи

Основные руководства для использующих DRF.

* [AJAX, CSRF & CORS](/django-rest-framework-russian-documentation/stati/topics/ajax-csrf-cors.md)
* [The Browsable API](/django-rest-framework-russian-documentation/stati/topics/browsable-api.md)
* [Улучшения в браузере](/django-rest-framework-russian-documentation/stati/topics/browser-enhancements.md)
* [Документирование вашего API](/django-rest-framework-russian-documentation/stati/topics/documenting-your-api.md)
* [HTML и формы](/django-rest-framework-russian-documentation/stati/topics/html-and-forms.md)
* [Интернационализация](/django-rest-framework-russian-documentation/stati/topics/internationalization.md)
* [REST, гипермедиа и HATEOAS](/django-rest-framework-russian-documentation/stati/topics/rest-hypermedia-hateoas.md)
* [Вложенные сериализаторы с возможностью записи](/django-rest-framework-russian-documentation/stati/topics/writable-nested-serializers.md)

## Разработка

Смотрите [руководство для разработчиков](https://www.django-rest-framework.org/community/contributing/) для получения информации о том, как клонировать репозиторий, запустить набор тестов и внести изменения в REST Framework.

## Поддержка

За поддержкой обращайтесь в [REST framework discussion group](https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework), попробуйте использовать канал `#restframework` на `irc.libera.chat`, или задайте вопрос на [Stack Overflow](https://stackoverflow.com/), обязательно указав тег ['django-rest-framework'](https://stackoverflow.com/questions/tagged/django-rest-framework).

Для получения приоритетной поддержки подпишитесь на [профессиональный или премиум спонсорский план](https://fund.django-rest-framework.org/topics/funding/).

## Безопасность

Вопросы безопасности решаются под руководством [Django security team](https://www.djangoproject.com/foundation/teams/#security-team).

**Пожалуйста, сообщайте о проблемах безопасности по электронной почте <security@djangoproject.com>**.

После этого сопровождающие проекта будут работать с вами над решением любых вопросов, если потребуется, до обнародования информации.

***

## Авторы перевода

* [Ilya Chichak](https://github.com/ilyachch/)

## Помощь в переводе

* <https://github.com/pymq>
* <https://github.com/rufatpro>
* [Dmitry Plaxunov](https://github.com/fojetin)

Спасибо всем за помощь в переводе!

Перевод производится с помощью утилиты [md\_docs-trans-app](https://github.com/ilyachch/md_docs-trans-app)
