2016-12-28 4 views
2

Я не понимаю, как получить доступ к значениям в моем POST-запросе из моего Python API.Невозможно получить доступ к значениям в запросе

Почему я не могу получить доступ к значениям в моем запросе API? Я явно получаю их в request.body, но не могу их восстановить.

Я попытался следующие методы:

request.POST['username'] 
request.POST.get('username') 

я получаю сообщение об ошибке с указанием django.utils.datastructures.MultiValueDictKeyError:

Вот является request.body, который не кажется JSON вообще.

"{\n \"username\": \"TestUsername\",\n \"password\": \"TestPass\"\n}" 

POST ЗАПРОС

{ 
    "username": "TestUsername", 
    "password": "TestPass" 
} 

HEADERS

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

VIEW

@csrf_exempt 
@api_view(['POST']) 
def create(request): 
    user = User() 
    if 'username' in request.POST and 'password' in request.POST: 
     user.username = request.POST['username'] 
     user.set_password(request.POST['password']) 
     user.save() 
     return Response({'Status' : 'Complete'}) 
    else: 
     return Response({'Status': 'Incomplete'}) 
+0

Не могли бы вы включить трассировку стека ошибки MultiValueKeyDict? –

ответ

3

Кажется мне, что, потому что ваш заголовок Content-Type является application/json, сначала необходимо разобрать тело запроса в формате JSON:

import json 

body = json.loads(request.POST) 

Хотя я думаю, что Django автоматически справиться с этим. Дайте мне знать, если это сработает для вас!

EDIT: Похоже, вы используете Django REST Framework. Если это так: получите доступ к своим данным, используя request.data вместо request.POST['key'].

+0

Ты потрясающий. Я не понимал, что использую специальную версию запроса. Я предположил, что это всего лишь стандартный объект запроса, поскольку я не импортировал какой-либо конкретный случай. Я все еще очень новичок в Python. –

Смежные вопросы