Python Django命中计数模块的问题

Python Django命中计数模块的问题,python,django,Python,Django,我试图使用该模块来保存不同用户访问教程的次数 模块已按说明正确安装。命中计数模板标记似乎返回了正确的结果 <script type="text/javascript"> $(document).ready(function() { {% get_hit_count_javascript for tut_contents %} }); </script> <script type="text/javascript"> /

我试图使用该模块来保存不同用户访问教程的次数

模块已按说明正确安装。命中计数模板标记似乎返回了正确的结果

<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>
问题是当我检查我的调试器时

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 table中没有保存任何内容的原因)

因为您将请求作为POST发送,并且获得403禁止,我猜这是csrf令牌的问题,在django中,每个POST请求都需要该令牌

解决它很容易。只需复制getCookie函数,并按照他们的解释将其与标题一起发送,或者简单地将其添加到请求中的数据中,如下所示:

$(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');
 });

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

解决它很容易。只需复制getCookie函数,并按照他们的解释将其与标题一起发送,或者简单地将其添加到请求中的数据中,如下所示:

$(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');
 });

另外,除了我的回答,我刚刚发现在你使用的教程的评论中也提到了在请求中添加csrf的主题。谢谢你,yuvi。对于感兴趣的人,请选中此fork:它将插入csrf令牌。但我还有另一个问题,现在它告诉我,Post404(未找到)正在查看您的URL,我怀疑您正在将视图链接到:
http://waaave.com.dev:8000/ajax/hit/
。将其更改为
url(r'^tutorial/ajax/hit/$”
,它可能会起作用。非常感谢。它起作用,Django Unchained是最好的电影!:)当然,很高兴能帮上忙=]此外,除了我的答案,我刚刚发现在你使用的教程的评论中也提到了在请求中添加csrf的主题。谢谢你,yuvi。对于感兴趣的人,请选中此fork:它将插入csrf令牌。但我还有另一个问题,现在它告诉我,Post404(未找到)正在查看您的URL,我怀疑您正在将视图链接到:
http://waaave.com.dev:8000/ajax/hit/
。将其更改为
url(r'^tutorial/ajax/hit/$”
,它可能会起作用。非常感谢。它起作用了,Django Unchained是最好的电影!:)当然,很高兴能帮上忙=]