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