Форум сайта python.su
Ajax реализую на jquery. На локальной машине все работает на ура.
Перенес на хостинг, при проверке csrf выдает следующую ошибку:
'NoneType' object has no attribute ‘startswith’
Вот код на который он ругается:
Файлл: /home/k/krimka/.local/lib/python2.7/site-packages/django/http/__init__.py in _load_post_and_files
if self.method != 'POST': self._post, self._files = QueryDict('', encoding=self._encoding), MultiValueDict() return if self._read_started and not hasattr(self, '_raw_post_data'): self._mark_post_parse_error() return if self.META.get('CONTENT_TYPE', '').startswith('multipart'): # Вот здесь Почему Content_Type выставляет в None не понятно. if hasattr(self, '_raw_post_data'): # Use already read data data = StringIO(self._raw_post_data) else: data = self try:
Отредактировано barabansheg (Окт. 16, 2012 22:38:03)
Офлайн
Возможно, Вам поможет вот эта статья
Django ajax csrf
Офлайн
Этим решением я давно пользуюсь. Проблема была в том, что подключалось одновременно много файлов в которых кусок кода из beforeSend(что отсылает X-CSRFToken) дублируется. Сделал лишь в самом первом файле его и все заработало. Но на встроеном сервере работало и без этого.
Вот сам код из beforeSend:
$.ajaxSetup({ beforeSend: function(xhr, settings) { function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie != '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) == (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { // Only send the token to relative URLs i.e. locally. xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); } } });
Отредактировано barabansheg (Окт. 17, 2012 10:27:34)
Офлайн