Browsable API¶
Это глубоко ошибочный трюизм… что мы должны культивировать привычку думать о том, что мы делаем. Дело обстоит прямо противоположным образом. Цивилизация развивается благодаря увеличению числа важных операций, которые мы можем выполнять, не задумываясь о них.
‒ :doc:`Alfred North Whitehead <https://en.wikiquote.org/wiki/Alfred_North_Whitehead>`** , Введение в математику (1911)
API может означать интерфейс прикладного программирования, но люди тоже должны уметь читать API; кто-то должен заниматься программированием.  Django REST Framework поддерживает генерацию удобного для человека HTML вывода для каждого ресурса, когда запрашивается формат HTML.  Эти страницы позволяют легко просматривать ресурсы, а также формы для отправки данных на ресурсы, используя POST , PUT , и DELETE.
URL-адреса¶
Если вы включите в вывод ресурсов полностью определенные URL-адреса, они будут «урлизованы» и сделаны кликабельными для удобства просмотра человеком.  Пакет rest_framework включает в себя помощник ** ``reverse:doc:` <../api-guide/reverse>` для этой цели.
Форматы¶
По умолчанию API возвращает формат, указанный в заголовках, который в случае браузера является HTML.  Формат может быть указан с помощью ?format= в запросе, так что вы можете посмотреть необработанный JSON-ответ в браузере, добавив ?format=json к URL.  Существуют полезные расширения для просмотра JSON в форматах Firefox и Chrome.
Настройка¶
Просматриваемый API построен с использованием Twitter’s Bootstrap (v 3.3.5), что позволяет легко настраивать внешний вид.
Чтобы настроить стиль по умолчанию, создайте шаблон с именем rest_framework/api.html, который расширяется от rest_framework/base.html.  Например:
templates/rest_framework/api.html
{% extends "rest_framework/base.html" %}
...  # Override blocks with required customizations
Переопределение темы по умолчанию¶
Чтобы заменить тему по умолчанию, добавьте блок bootstrap_theme к вашему api.html и вставьте link в нужный css-файл темы Bootstrap.  Это полностью заменит включенную тему.
{% block bootstrap_theme %}
    <link rel="stylesheet" href="/path/to/my/bootstrap.css" type="text/css">
{% endblock %}
Подходящие готовые темы для замены доступны по адресу Bootswatch.  Чтобы использовать любую из тем Bootswatch, просто скачайте файл темы bootstrap.min.css, добавьте его в свой проект и замените тему по умолчанию, как описано выше.
Вы также можете изменить вариант navbar, который по умолчанию navbar-inverse , используя блок bootstrap_navbar_variant.  Пустой блок {% block bootstrap_navbar_variant %}{% endblock %} будет использовать оригинальный стиль навигационной панели Bootstrap.
Полный пример:
{% extends "rest_framework/base.html" %}
{% block bootstrap_theme %}
    <link rel="stylesheet" href="https://bootswatch.com/flatly/bootstrap.min.css" type="text/css">
{% endblock %}
{% block bootstrap_navbar_variant %}{% endblock %}
Для более специфических настроек CSS, чем просто переопределение темы bootstrap по умолчанию, вы можете переопределить блок style.
 
*Скриншот загрузочной темы «Cerulean».
 
Скриншот темы bootswatch „Slate“.
Блоки¶
Все блоки, доступные в просматриваемом базовом шаблоне API, которые могут быть использованы в вашем api.html.
- body- Весь html- <body>.
- bodyclass- атрибут класса для тега- <body>, по умолчанию пустой.
- bootstrap_theme- CSS для темы Bootstrap.
- bootstrap_navbar_variant- CSS-класс для навигационной панели.
- branding- раздел брендинга на навигационной панели, см. Bootstrap components.
- breadcrumbs- Ссылки, показывающие вложенность ресурсов, позволяющие пользователю вернуться назад по ресурсам. Рекомендуется сохранить эти ссылки, но их можно переопределить с помощью блока хлебных крошек.
- script- Файлы JavaScript для страницы.
- style- Таблицы стилей CSS для страницы.
- title- Название страницы.
- userlinks- Это список ссылок справа от заголовка, по умолчанию содержит ссылки входа/выхода. Чтобы добавить ссылки вместо замены, используйте- {{ block.super }}для сохранения ссылок аутентификации.
Компоненты¶
Доступны все стандартные Bootstrap components.
Всплывающие подсказки¶
Просматриваемый API использует компонент всплывающих подсказок Bootstrap.  Любой элемент с классом js-tooltip и атрибутом title имеет такое содержимое заголовка, что при наведении на него будет отображаться всплывающая подсказка.
Шаблон входа в систему¶
Чтобы добавить брендинг и настроить внешний вид шаблона входа, создайте шаблон под названием login.html и добавьте его в свой проект, например: templates/rest_framework/login.html.  Шаблон должен расширяться от rest_framework/login_base.html.
Вы можете добавить название своего сайта или брендинг, включив блок брендинга:
{% extends "rest_framework/login_base.html" %}
{% block branding %}
    <h3 style="margin: 0 0 20px;">My Site Name</h3>
{% endblock %}
Вы также можете настроить стиль, добавив блок bootstrap_theme или style, аналогичный api.html.
Расширенная настройка¶
Контекст¶
Контекст, доступный шаблону:
- allowed_methods: Список методов, разрешенных ресурсом
- api_settings: Настройки API
- available_formats: Список форматов, разрешенных ресурсом
- breadcrumblist: Список ссылок, следующих за цепочкой вложенных ресурсов
- content: Содержание ответа API
- description: Описание ресурса, созданное на основе его docstring
- name: Имя ресурса
- post_form: Экземпляр формы для использования формой POST (если разрешено).
- put_form: Экземпляр формы для использования формой PUT (если разрешено)
- display_edit_forms: Булево значение, указывающее, будут ли отображаться формы POST, PUT и PATCH.
- request: Объект запроса
- response: Объект ответа
- version: Версия Django REST Framework
- view: Представление, обрабатывающее запрос
- FORMAT_PARAM: Представление может принимать переопределение формата
- METHOD_PARAM: Представление может принять переопределение метода
Вы можете переопределить метод BrowsableAPIRenderer.get_context(), чтобы настроить контекст, передаваемый шаблону.
Не используется файл base.html¶
Для более продвинутой настройки, например, без основы Bootstrap или более тесной интеграции с остальной частью вашего сайта, вы можете просто выбрать отсутствие api.html расширить base.html.  Тогда содержание и возможности страницы будут полностью зависеть от вас.
Обработка ChoiceField с большим количеством элементов.¶
Когда отношения или ChoiceField имеют слишком много элементов, рендеринг виджета, содержащего все опции, может стать очень медленным и привести к плохой работе рендеринга API просмотра.
Самый простой вариант в этом случае - заменить вход select на стандартный текстовый вход. Например:
 author = serializers.HyperlinkedRelatedField(
    queryset=User.objects.all(),
    style={'base_template': 'input.html'}
)
Автозаполнение¶
Альтернативным, но более сложным вариантом может быть замена ввода виджетом автозаполнения, который загружает и отображает только подмножество доступных вариантов по мере необходимости. Если вам нужно сделать это, вам придется поработать над созданием собственного HTML-шаблона автозаполнения.
Существуют a variety of packages for autocomplete widgets <https://www.djangopackages.com/grids/g/auto-complete/>`** , такие как :doc:`django-autocomplete-light <https://github.com/yourlabs/django-autocomplete-light>`** , на которые вы можете захотеть сослаться. Обратите внимание, что вы не сможете просто включить эти компоненты в качестве стандартных виджетов, а должны будете написать HTML-шаблон в явном виде. Это связано с тем, что REST framework 3.0 больше не поддерживает аргумент ключевого слова ``widget`, поскольку теперь он использует шаблонизированную генерацию HTML.