Django-rest-framework принимает данные JSON?

Я создал API RESTFul, используя django-rest-framework. Конечная точка пользователя

/api/v1/users

Я хочу создать нового пользователя. Я отправляю данные пользователя в формате JSOn.

{
    "username": "Test1",
    "email": "[email protected]",
    "first_name": "Test1",
    "last_name": "Test2",
    "password":"12121212"
}

Я использую расширение Google Postman для проверки api. Но данные пользователя не сохраняются. Ответ:

{
    "detail": "Unsupported media type \"text/plain;charset=UTF-8\" in request."
}

Прикрепленный скриншот enter image description here

Ответ 1

Вы пропустили добавление заголовка Content-Type в разделе заголовков. Просто установите заголовок Content-Type на application/json, и он должен работать.

Смотрите изображение ниже:

postman

Кроме того, вам может потребоваться включить токен CSRF в заголовок, если вы получите сообщение об ошибке {"detail": "CSRF Failed: CSRF token missing or incorrect."} при создании запроса POST, используя Postman. В этом случае добавьте заголовок X-CSRFToken также со значением в качестве значения токена CSRF.

Ответ 2

Вам нужно сделать два шага, чтобы решить эту проблему:

  • Добавить Content-Type заголовок с application/json значением
  • Добавить заголовок Authorization с Token {YOUR_CUSTOM_TOKEN} для передачи CSRFToken

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

Я надеюсь, что это поможет

Ответ 3

Я отправляю этот ответ, если кто-то сталкивается с такой проблемой, как моя.

Я работаю над приложением Front-End, используя Angular 2 с API, созданным с помощью Django Rest Framework, и я использовал для отправки запросов со следующими заголовками

'Content-Type': 'application/json'

И он работал нормально, пока я не попробовал его на Fire Fox, и я не смог загрузить нужные данные, и решил его с добавлением следующих заголовков

'Content-Type': 'application/json',
'Accept': 'application/json'

Здесь объяснение Content-Type сообщает серверу, каков тип содержимого данных, пока Accept сообщает, какой тип содержимого клиентская сторона будет accpet.

Вот хороший ответ на этот вопрос:

https://webmasters.stackexchange.com/questions/31212/difference-between-the-accept-and-content-type-http-headers

Ответ 4

Вам нужно определить тип контента, установив соответствующие заголовки. В случае Postman вам нужно установить следующие значения в поле url:

Заголовок: "Тип содержимого"

Значение: application/json