我开始使用基于django的简单的支持Ajax的Web应用程序。
我能够启动这个组合。从主页,当我尝试打另一个网址时,我收到403错误
我的索引页面是http://mydomain.com/SampleApp - 这很好用
我的Ajax网址为http://mydomain.com/SampleApp/ajax - 这会产生403错误
请将上述网址中的“mydomain.com”替换为适当的localhost:8000,因为它受到限制。
显示的错误是
CSRF验证失败。请求中止。 失败的原因: 未设置CSRF cookie。
我想我在settings.py中缺少一些重要的设置
添加源代码
URL Conf
url(r'^SampleApp/', include('views.urls'))
views.url.py
urlpatterns = patterns('',
url(r'^ajax/$', views.ajax),
url(r'^$', views.index)
)
views.views.py
def index(request):
print('Rendering Index')
return render(request, 'index.html')
def ajax(request):
print('rendering ajax')
return render(request, 'ajax.html');
为简洁起见,我排除了进口
答案 0 :(得分:0)
看起来你没有把csrfmiddlewaretoken
放在你的ajax请求中。
包含它的最简单方法是:
var data = {
'csrfmiddlewaretoken': $('input[name="csrfmiddlewaretoken"]').val(),
// any other data
},
url = '/api/create/';
$.ajax({
type: 'POST',
url: url,
data: data,
...
不要忘记将{% csrf_token %}
包含在发送ajax请求的页面模板中(如index.html)
或者你可以通过@csrf_exempt
装饰者来装饰你的观点:
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def ajax(request):
print('rendering ajax')
return render(request, 'ajax.html');
这允许您从ajax请求中排除csrfmiddlewaretoken
希望能帮到你。