Django Hitcount模块的问题

时间:2013-10-07 09:26:19

标签: python django

我正在尝试使用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 个答案:

答案 0 :(得分:4)

由于您将请求作为POST发送并获得403 Forbidden,我将猜测这是csrf令牌的问题,在每个POST请求中都需要django。

解决它很容易。只需复制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');
 });