2015-12-23 5 views
0

У меня возникла проблема при попытке получить данные POST. Мой сервер продолжает отказываться от моих данных (ошибка 500 серверов).

Это так, как я его отформатировал? Я заметил, что в моей консоли в заголовках ответов он говорит «Content-Type: text/html». Должен ли это говорить JSON?

В питона, это работает отлично:

requests.post('http://test.net/item/291/', {'uid':21, 'click':1, 'like':1, 'image':0, 'scroll':1, 'clickbuy':0}) 

I установка файл промежуточного, который включает в себя:

class CorsMiddleware(object): 

    def process_response(self, request, response): 
     response['Access-Control-Allow-Origin'] = '*' 
     response['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS, PUT' 
     return response 

Моя AngularJS приложение настроено так:

.factory('cardsApi', ['$http', function ($http) { 
     var like = JSON.stringify({uid:21, click:1, like:1, image:0, scroll:1, clickbuy:0})); 

     var postLikes = function (product_id) { 
      return $http.post('http://test.com/api/item/' + product_id, like); 
     } 

     return { 
      postLikes: postRecordLikes 
     }; 
    }]) 

.config(function ($httpProvider) { 
    $httpProvider.defaults.headers.common = {}; 
    $httpProvider.defaults.headers.post = {}; 
    $httpProvider.defaults.headers.put = {}; 
    $httpProvider.defaults.headers.patch = {}; 
}) 

Ошибка (в браузере):

enter image description here

+0

У вашего сервера возникли проблемы с обработкой запроса. Попробуйте удалить бит 'stringify', поэтому' var like = {blah blah blah}; ' –

+0

Вы имели в виду удалить весь JSON.stringify? Я сделал это, все еще получаю 500 ошибок. Я заметил, что в заголовках Response указано, что тип содержимого - это текст/html – Ycon

+0

Ну, без дополнительной информации это выглядит как проблема с кодом сервера, а не угловая. Попробуйте настроить скрипт, который демонстрирует проблему. –

ответ

0

Ответ указан в значении исключения в нижней части traceback you pasted.

Exception Value: You called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SLASH set. Django can't redirect to the slash URL while maintaining POST data. Change your form to point to stashdapp-t51va1o0.cloudapp.net/api/item/37/ (note the trailing slash), or set APPEND_SLASH=False in your Django settings. 

Для запросов POST, убедитесь, что URL соответствует шаблону, определенный в вашем urls.py (или в любой третьей участник Django приложение, которое вы используете, которые могут быть определения шаблонов URL для вас). В этом случае ваш шаблон URL включает в себя трейлинг-косую черту, поэтому вы должны включить его с URL-адресом для вашего запроса POST.

По умолчанию, Django автоматически перенаправляет URL-адресов без слешей к URL-с слешей, но для POST запросов вы потеряете представленные данные, и это будет сгенерировано исключение.

p.s. Если вы уже не пробовали это, и есть какая-то причина, это не сработает для вас, я определенно рекомендую использовать приложение django-cors-headers, а не перекладывать свое собственное промежуточное ПО для работы с CORS.

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