2013-10-07 3 views
0

Я пытаюсь использовать модуль django-hitcount, чтобы сохранить количество раз, когда к учебнику обращались разные пользователи.Проблемы с модулем Django Hitcount

Модуль установлен правильно, как описано in the blog. Тег шаблона hitcount, похоже, возвращает правильный результат.

<script type="text/javascript"> 
    $(document).ready(function() { 
     {% get_hit_count_javascript for tut_contents %} 
    }); 
</script> 

<script type="text/javascript"> 
    // returns 
    $(document).ready(function() { 
     $.post('/tutorial/ajax/hit/', 
     { hitcount_pk : '1' }, 
     function(data, status) { 
       if (data.status == 'error') { 
      // do something for error? 
       } 
      }, 
     'json'); 
    }); 
</script> 

Мой urls.py

from django.conf.urls import patterns 
from hitcount.views import update_hit_count_ajax 
from django.conf.urls import url 

urlpatterns = patterns('tutorial.views', 
    (r'^$', 'root'), 
    # Hitcount url to save hits on tutorial entity 
    url(r'^ajax/hit/$', update_hit_count_ajax, name='hitcount_update_ajax'), 
) 

Проблема заключается в том, когда я проверить мой отладчик.

Failed to load resource: the server responded with a status of 403 (FORBIDDEN) 
POST http://waaave.com.dev:8000/tutorial/ajax/hit/ 403 (FORBIDDEN) 

(Это, вероятно, почему ничего не сохраняется в hitcount_hit таблице)

+1

Кроме того, в дополнение к моему ответу, я только что узнал, что эту тему добавления csrf в запросе также упоминается в комментариях учебника, который вы используете. – yuvi

+0

Спасибо yuvi. Для заинтересованных людей проверьте эту вилку: https://github.com/zaebee/django-hitcount В нее будет вставлен токен csrf. Но у меня другая проблема, теперь она говорит мне POST http://waaave.com.dev:8000/tutorial/ajax/hit/ 404 (НЕ НАЙДЕНО) –

+1

Глядя на ваши URL-адреса Я подозреваю, что вы связываете представление с: 'http : //waaave.com.dev: 8000/Аякса/хит/'. измените его на 'url (r '^ tutorial/ajax/hit/$'', и он, вероятно, будет работать – yuvi

ответ

4

Поскольку вы отправляете запрос как POST и получение 403 Forbidden, я собираюсь предположить, что это проблема с CSRF токен, который в django требуется в каждом запросе POST.

Решение очень просто. Просто скопируйте функцию getCookie from the documentation и либо отправить его с заголовком, как они объясняют, или просто добавить его к данным в запросе, как это:

$(document).ready(function() { 
    $.post('/tutorial/ajax/hit/', 
    { 'hitcount_pk' : '1', 
    'csrfmiddlewaretoken': getCookie('csrftoken') }, 
    function(data, status) { 
      if (data.status == 'error') { 
     // do something for error? 
      } 
     }, 
    'json'); 
}); 
Смежные вопросы