【问题标题】:Getting 403 error on url while sending POST发送 POST 时在 url 上出现 403 错误
【发布时间】:2013-07-06 12:48:57
【问题描述】:

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

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

为简洁起见,我已经排除了导入

【问题讨论】:

  • 你有一些 .htaccess 文件吗? PD:它给了我一个 404 错误 no 403
  • 没有 HtAccess 文件。我收到 Forbidden (403) 错误作为格式正确的 html。
  • 在您使用表单的每个视图中添加 context_instance=RequestContext(request)。让我猜你使用 render_to_response
  • 您是否在 ajax 请求中发送 csrf 令牌? django 文档提供了有关如何执行此操作的 javascript 代码示例
  • @catherine 我已经添加了源代码sn-p

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


【解决方案1】:

看起来您没有在 ajax 请求中输入 csrfmiddlewaretoken。 包含它的最简单方法是:

var data = {
        'csrfmiddlewaretoken': $('input[name="csrfmiddlewaretoken"]').val(),
        // any other data
    },
    url = '/api/create/';
    $.ajax({
        type: 'POST',
        url: url,
        data: data,
    ...

不要忘记在发送 ajax 请求的页面模板中包含 {% csrf_token %}(如 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

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 2023-03-10
    • 2011-10-11
    • 2011-06-24
    • 2012-10-29
    • 1970-01-01
    • 2021-06-07
    相关资源
    最近更新 更多