Spec-Zone.ru › Django REST Framework

Запросы

Если вы работаете с веб-сервисами на основе REST… вам следует игнорировать request.POST.

— Malcom Tredinnick, Группа разработчиков Django

Класс Request фреймворка REST extends стандартный HttpRequest, добавляя поддержку гибкого разбора запросов и аутентификации фреймворка REST.

Разбор запросов

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

.data

request.data возвращает разобранное содержимое тела запроса. Это аналогично стандартным атрибутам request.POST и request.FILES, за исключением:

  • Он включает в себя все разобранные данные, включая файловые и нефайловые входные данные.
  • Он поддерживает разбор содержимого HTTP-методов, отличных от POST, что означает, что вы можете получить доступ к содержимому запросов PUT и PATCH.
  • Он поддерживает гибкий разбор запросов фреймворка REST, а не только поддержку данных формы. Например, вы можете обрабатывать входящие JSON-данные аналогично тому, как вы обрабатываете входящие данные формы.

Дополнительные сведения см. в документации по парсерам.

.query_params

request.query_params — это более правильное название синонима для request.GET.

Для большей ясности в вашем коде рекомендуется использовать request.query_params вместо стандартного request.GET Django. Это поможет сделать ваш код более корректным и понятным — любые типы HTTP-методов могут включать параметры запроса, а не только запросы GET.

.parsers

Класс APIView или декоратор @api_view будут гарантировать, что это свойство автоматически будет установлено в список экземпляров Parser, на основе набора parser_classes в представлении или на основе настройки DEFAULT_PARSER_CLASSES.

Обычно вам не нужно обращаться к этому свойству.

Примечание: Если клиент отправляет некорректные данные, доступ к request.data может вызвать ParseError. По умолчанию класс APIView фреймворка REST или декоратор @api_view перехватить ошибку и вернуть ответ 400 Bad Request.

Если клиент отправляет запрос с типом содержимого, который невозможно разобрать, будет поднято исключение UnsupportedMediaType, которое по умолчанию будет перехвачено и вернет ответ 415 Unsupported Media Type.

Переговоры о содержимом

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

.accepted_renderer

Экземпляр рендерера, выбранный на этапе переговоров о содержимом.

.accepted_media_type

Строка, представляющая тип носителя, принятый на этапе переговоров о содержимом.

Аутентификация

REST фреймворк предоставляет гибкую аутентификацию по запросу, которая позволяет вам:

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

.user

request.user обычно возвращает экземпляр django.contrib.auth.models.User, хотя поведение зависит от используемой политики аутентификации.

Если запрос не авторизован, значение по умолчанию для request.user является экземпляром django.contrib.auth.models.AnonymousUser.

Дополнительные сведения см. в документации по аутентификации.

.auth

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

Если запрос не авторизован или дополнительный контекст отсутствует, значение по умолчанию для request.auth — None.

Дополнительные сведения см. в документации по аутентификации.

.authenticators

Класс APIView или декоратор @api_view будут гарантировать, что это свойство автоматически будет установлено в список экземпляров Authentication, на основе набора authentication_classes в представлении или на основе настройки DEFAULT_AUTHENTICATORS.

Обычно вам не нужно обращаться к этому свойству.

Примечание: Вы можете увидеть исключение WrappedAttributeError, когда вызываются свойства .user или .auth . Эти ошибки возникают от аутентификатора как стандартное AttributeError, но необходимо, чтобы они переиздавались как другой тип исключения, чтобы предотвратить их подавление внешним доступом к свойству. Python не распознает, что AttributeError происходит от аутентификатора, и вместо этого предположит, что у объекта запроса нет свойства .user или .auth. Необходимо исправить аутентификатор.

Улучшения для браузеров

REST фреймворк поддерживает несколько улучшений для браузеров, таких как браузерные PUT, PATCH и DELETE формы.

.method

request.method возвращает строку представления HTTP-метода запроса в верхнем регистре.

Браузерные PUT, PATCH и DELETE формы прозрачно поддерживаются.

Дополнительная информация приведена в документации по улучшениям для браузеров.

.content_type

request.content_type, возвращает строковый объект, представляющий тип носителя тела HTTP-запроса, или пустую строку, если тип носителя не указан.

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

Если вам необходимо получить доступ к типу содержимого запроса, вы должны использовать свойство .content_type вместо request.META.get('HTTP_CONTENT_TYPE'), поскольку оно обеспечивает прозрачную поддержку браузерного содержимого, не являющегося формой.

Дополнительная информация приведена в документации по улучшениям для браузеров.

.stream

request.stream возвращает поток, представляющий содержимое тела запроса.

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

Стандартные атрибуты HttpRequest

Поскольку Request фреймворка REST расширяет HttpRequest Django, доступны и все другие стандартные атрибуты и методы. Например, словари request.META и request.session доступны как обычно.

Обратите внимание, что по соображениям реализации класс Request не наследуется от класса HttpRequest, а вместо этого расширяет его с помощью композиции.

request.py

Copyright © 2011–present Encode OSS Ltd.
Licensed under the BSD License.
https://www.django-rest-framework.org/api-guide/requests/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API