<p>我正在使用Daxice库在我的Django应用程序中创建AJAX调用。
当我在表单上创建<code>POST</code>方法时,我得到了上面提到的错误:</p>
<pre><code>Forbidden (403)
CSRF verification failed. Request aborted.
</code></pre>
<p>我的设置.py有:</p>
^{pr2}$
<p>我的网址.py在</p>
<pre><code>from django.conf.urls import patterns, include, url
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from dajaxice.core import dajaxice_autodiscover, dajaxice_config
dajaxice_autodiscover()
urlpatterns = patterns('',
url(dajaxice_config.dajaxice_url, include('dajaxice.urls')),
url(r'^$', 'apps.views.home'),
)
urlpatterns += staticfiles_urlpatterns()
</code></pre>
<p>我的视图.py公司名称:</p>
<pre><code>from django.http import HttpResponse
from django.template import loader, Context
from django.core.context_processors import csrf
def home(request):
t = loader.get_template('index.html')
html = t.render(Context( ))
return HttpResponse(html)
</code></pre>
<p>我的模板索引.html公司名称:</p>
<pre><code>{% load dajaxice_templatetags %}
<html>
<head>
<title>My base template</title>
<script src="http://code.jquery.com/jquery-latest.min.js"
type="text/javascript"></script>
{% dajaxice_js_import %}
<script type="text/javascript">
function shout(data){
alert(data.message)
}
</script>
</head>
<body>
<form method="POST" action="">{% csrf_token %}
Page: <input type="text" name="page"><br>
From: <input type="text" name="from"> (From < To) <br>
To: <input type="text" name="to"> (returns results before that day)<br>
<input type="submit" onclick="Dajaxice.apps.hello(shout);" value="Submit">
</form>
<br>
<br>
<input type="button" onclick="Dajaxice.apps.hello(shout);" value="Get message from server!">
</body>
</html>
</code></pre>
<p>还有我的阿贾克斯.py公司名称:</p>
<pre><code>import simplejson
from dajaxice.decorators import dajaxice_register
@dajaxice_register(method='GET')
@dajaxice_register(method='POST', name='other_post')
def hello(request):
return simplejson.dumps({'message':'Hello from Python!'})
</code></pre>
<p>如果我点击按钮,消息就会被提醒。当我提交表格时,我得到了这个错误。我怎样才能修好它?在</p>
<p>最后,我相信我已经修复了调试页面中CSRF显示的所有可能性:</p>
<pre><code>In general, this can occur when there is a genuine Cross Site Request Forgery, or when Django's CSRF mechanism has not been used correctly. For POST forms, you need to ensure:
Your browser is accepting cookies.
The view function uses RequestContext for the template, instead of Context.
In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL.
If you are not using CsrfViewMiddleware, then you must use csrf_protect on any views that use the csrf_token template tag, as well as those that accept the POST data.
</code></pre>