发送POST时在URL上收到403错误

时间:2013-07-06 12:48:58

标签: python django http-status-code-403

我开始使用基于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');

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

1 个答案:

答案 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

希望能帮到你。