0

我开始使用基于 django 的简单的启用 ajax 的网络应用程序。

我能够启动主页。当我尝试点击另一个网址时,从主页出现 403 错误

我的索引页面是http://mydomain.com/SampleApp - 这很好用

我的 Ajax 网址是http://mydomain.com/SampleApp/ajax - 这会产生 403 错误

请用正确的 localhost:8000 替换上述 url 中的 'mydomain.com',因为它受到限制。

显示的错误是

CSRF 验证失败。请求中止。失败原因:未设置 CSRF cookie。

我想我在 settings.py 中遗漏了一些重要的设置

添加源代码

网址配置

url(r'^SampleApp/', include('views.urls'))

意见.url.py

urlpatterns = patterns('',
    url(r'^ajax/$', views.ajax),
    url(r'^$', views.index)
)

视图.views.py

def index(request):
    print('Rendering Index')
    return render(request, 'index.html')

def ajax(request):
    print('rendering ajax')
    return render(request, 'ajax.html');

为简洁起见,我排除了进口

4

1 回答 1

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');

这允许您csrfmiddlewaretoken从 ajax 请求中排除

希望对你有帮助。

于 2013-07-06T19:41:39.027 回答