Django 发送 POST 请求时返回 403 错误

新手上路,请多包涵

当我使用以下 Python 代码向我的 Django 网站发送 POST 请求时,我收到 403: Forbidden 错误。

 url = 'http://www.sub.example.com/'
values = { 'var': 'test' }

try:
    data = urllib.urlencode(values, doseq=True)
    req = urllib2.Request(url, data)
    response = urllib2.urlopen(req)
    the_page = response.read()
except:
    the_page = sys.exc_info()
    raise

当我打开任何其他网站时,它工作正常。 example.com 也是 Django 网站,它也能正常工作。我想,那是 Django 配置问题,谁能告诉我应该怎么做才能提供对脚本的访问权限?

原文由 Djent 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

您发布的视图是否有 Django 表单?如果是这样,我想知道它是否给出了 csrf 错误。我认为这表现为 403。在这种情况下,您需要添加 {{ csrf_token }} 标签。只是一个想法。

原文由 Joe J 发布,翻译遵循 CC BY-SA 3.0 许可协议

看这里 https://docs.djangoproject.com/en/dev/ref/csrf/#how-to-use-it

尝试用 @csrf_exempt 标记您的视图。这样,Django 的 CSRF 中间件将忽略 CSRF 保护。您还需要使用 from django.views.decorators.csrf import csrf_exempt 。请参阅: https ://docs.djangoproject.com/en/dev/ref/csrf/#utilities

请注意,通过在您的视图中禁用 CSRF 保护,您正在为 CSRF 攻击打开大门。

如果安全对您至关重要,那么请考虑使用 @csrf_exempt 后跟 @requires_csrf_token (参见: https ://docs.djangoproject.com/en/dev/ref/csrf/#unprotected-view -需要 csrf 令牌)。然后,在您的脚本中传递此令牌,仅此而已。

原文由 bx2 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题