Не могу получить данные AngularJS $http.post в Django

Я знаю, что это очень простой вопрос, но, потратив целый день, я задаю его. Я просто отправляю данные, используя следующий код AngularJS в Django:

$http.post('/data/creation', 
                    {
                html: 'a'

            }).
              success(function(data, status, headers, config) {
                // this callback will be called asynchronously
                // when the response is available
                  console.log(data);
                  console.log(status);
                  console.log(headers);
                  console.log(config);
              }).
              error(function(data, status, headers, config) {
                // called asynchronously if an error occurs
                // or server returns response with an error status.
                  console.log(status);
                  console.log(data);
              });

и в джанго:

@csrf_exempt
def snippets_post(request):
    html = False
    css = False
    js = False
    JSONdata = False
    response = "You're looking at the results of question %s."
    if request.method == 'POST':
        try:
            JSONdata = request.POST.get('data', False) # it was [] in actual
        except:
            JSONdata = 'ERROR'

    return HttpResponse(JSONdata)

В ответ я получаю False: "заменив данные на html в POST.get, вы получите тот же результат". Я не знаю, что здесь происходит. Может ли кто-нибудь помочь мне здесь?

Спасибо


person Arslan Rafique    schedule 04.11.2014    source источник
comment
Не могли бы вы вернуть статическое значение и проверить.. вернуть HttpResponse (значение сообщения).. Я сомневаюсь, что URL-адрес попадает в этот фрагмент или где-то еще?   -  person Asik    schedule 04.11.2014
comment
Связь идет идеально, я получаю False, потому что POST.get не может получить «данные» или «html». Вопрос как это получить?   -  person Arslan Rafique    schedule 04.11.2014
comment
Пожалуйста, отследите запрос, используя вкладку firebug или chrome network, нажав F12, и посмотрите, содержит ли URL-адрес html/data во время обработки запроса. Если он есть, проблема заключается в коде на стороне вашего сервера...   -  person Asik    schedule 04.11.2014
comment
Конечно, данные собираются и проверяются, это какая-то проблема с python/django, некоторый синтаксический анализ и т. д., которые я здесь упускаю, но не могу сказать.   -  person Arslan Rafique    schedule 04.11.2014
comment
Удалите все строки и просто попробуйте выполнить этот запрос. POST['data']... Проверьте этот поток Variables-handled-in-python" title="как постить и получать переменные, обрабатываемые в python"> stackoverflow.com/questions/464040/   -  person Asik    schedule 04.11.2014
comment
на самом деле я пробовал это раньше, оба одинаковы, за исключением того, что один возвращает False, а другой дает ошибку. поэтому добавили try catch, но тоже не сработало.   -  person Arslan Rafique    schedule 04.11.2014
comment
Давайте продолжим обсуждение в чате.   -  person Asik    schedule 04.11.2014
comment
Спасибо @Asik, я разгадал эту загадку. Благодарю за помощь =)   -  person Arslan Rafique    schedule 05.11.2014


Ответы (1)


На самом деле, когда мы отправляем данные из AngularJs с помощью POST $http, он отправляет данные с content-type = "application/json" на сервер. И Джанго не понимает этот формат. И поэтому вы не можете получить отправленные данные.

Решение состоит в том, чтобы изменить заголовок типа контента, используя следующую конфигурацию:

    app.config(['$httpProvider', function ($httpProvider) {
        $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
}]);
person Arslan Rafique    schedule 05.11.2014
comment
Интересный! Рад узнать об этом. спасибо что сообщили :) - person Asik; 05.11.2014
comment
Спасибо, это также относится к фреймворку Turbogears. - person A-Palgy; 18.02.2015