Проблема при выполнении операции CRUD с помощью Django REST API

Здравствуйте, я новичок в Django Rest Framework. Недавно я создал REST API с именем "api/studentapi", используя django REST framework на локальном хосте. Операция CRUD работает совершенно нормально в просматриваемом API. Но когда я пытаюсь получить доступ к тому же API из стороннего файла python, я не могу выполнить операцию POST, хотя я могу выполнить операцию GET. При выполнении операции POST сервер отвечает мне как "Unsupported Media Type: /api/studentapi/".Я выкладываю серию изображений кода, чтобы было понятнее. Стороннее python приложение, которое я создал для доступа к "api/studentapi"

Файловая структура моего проекта

Модель формы, которую я создал

Файлы сериализатора, которые я создал

Код урлов

Наконец, файл представления

Убедитесь, что вы передаете заголовок content type во время запросов post и put, поскольку именно так django_rest_framework понимает, какой парсер он будет использовать. Django rest framework поддерживает тип содержимого form-data, JSON, x-www-form-urlencoded и multipart из коробки.

Если вы отправляете данные в формате JSON, добавьте заголовок к вашему запросу:

Content-Type: application/json

Если вы отправляете данные формы или файл(ы), добавьте заголовок:

Content-Type: multipart/form-data

Если вы отправляете только данные формы, используйте:

Content-Type: application/x-form-urlencoded

Для вашего кода вот как добавить заголовок

r = request.post(
    url=URL,
    data=json_data,
    headers= {
        'Content-Type': 'application/json'
    }
)    

TL;DR: Вам нужно передать полезную нагрузку как аргумент json в requests.post:

data = {
   "name": "sa",
   "roll": 1,
   "city": "lam"
}

r = requests.post(url=URL, json=data)

Подробности:

Как указано в официальной документации библиотеки requests:

url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}

r = requests.post(url, data=json.dumps(payload))

Обратите внимание, что приведенный выше код НЕ добавит заголовок Content-Type (в частности, он НЕ установит его в application/json).

.

Если вам нужен этот заголовок и вы не хотите кодировать dict самостоятельно, вы также можете передать его напрямую, используя параметр json (добавлен в версии 2.4.2), и он будет закодирован автоматически:

url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
r = requests.post(url, json=payload)
import json
import requests
url = "https://127.0.0.1:8000/api/studentapi/"
data_response = {
   "name": "sa",
   "roll": 1,
   "city": "lam"
}
data_json =  json.dumps(data_response)
req =  requests.post(url, data=data_json)
Вернуться на верх