2015-10-10 1 views
0

Я посылаю данные с помощью Curl, как это: -данные Джанго получить POST вывешены через CURL

curl -X POST --header "Content-Type: application/json" --header "Accept: application/json" -d "{ 
    \"social_id\": \"string\", 
    \"social_source\": \"FB/Gmail\", 
    \"access_token\": \"string\" 
}" 

Но я не в состоянии получить эти данные в своих взглядах: -

Вот мой вид: -

class UserCreate(View): 

    @method_decorator(csrf_exempt) 
    def dispatch(self, request, *args, **kwargs): 
     return super(UserCreate, self).dispatch(request, *args, **kwargs) 

    def post(self, request): 
     print request.POST['social_id'] 

Я пробовал request.data. Что я делаю неправильно?

+0

попробовать request.DATA –

+0

Не работает .... – PythonEnthusiast

ответ

2

Если вы размещаете блон JSON на сервере, то у вас не будет доступных параметров POST - они заполняются только при отправке данных в формате application/x-www-form-urlencoded (например, с использованием формы HTML).

Вы можете получить доступ к данным в формате JSON следующим образом (внутри функции вида):

import json 
data = json.loads(request.body) 
# Data is now a python dict, e.g., 
print data['social_id'] 
+0

Я попытался изменить заголовки, как вы описали, но я все еще получаю та же ошибка. 'request.POST ['social_id']' не существует. 'curl -X POST -header 'Content-Type: application/x-www-form-urlencoded" --header "Accept: application/x-www-form-urlencoded" -d "{ \" social_id \ ": \ "string \", \ "social_source \": \ "FB/Gmail \" } "" http://127.0.0.1:8000/users/ "' – PythonEnthusiast

+0

Хотя 'request.body' работает, когда заголовок' application/json', но все же я хочу знать, почему 'request.POST' не работает? – PythonEnthusiast

+0

Первое предложение моего ответа объясняет, почему оно не работает: POST будет работать только с кодированными формами данных, а не с JSON. Я бы посоветовал вам узнать, как HTTP POST работает вообще, прежде чем пытаться реализовать это. – solarissmoke