我正在尝试使用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表中没有保存的原因)
答案 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');
});