我正在使用jQuery来执行AJAX POST,但是收到CSRF错误。我假设这是因为CSRF cookie没有发送给客户端发回。有没有办法在Django 1.0中解决这个问题?
答案 0 :(得分:1)
我是从一个GET结果的视图中进行AJAX POST,因此Django中间件没有生成任何csrf令牌。
我使用了csrf中间件(/usr/lib/python2.5/site-packages/django/contrib/csrf/middleware.py)中的代码来生成一个csrf令牌,我用GET上下文发送该令牌。现在AJAX POST工作正常,因为令牌存在。
创建csrf标记:
def csrf_token_create(request):
from django.contrib.csrf.middleware import _make_token
try:
session_id = request.COOKIES[settings.SESSION_COOKIE_NAME]
except KeyError:
# No session, no check required
return None
csrf_token = _make_token(session_id)
return csrf_token
在视图上下文中:
csrf_token = csrf_token_create(request)
return render_to_response('view.html', {'csrfmiddlewaretoken': csrf_token})
在html模板中为csrfmiddlewaretoken添加隐藏输入。
答案 1 :(得分:0)
django 1.4的文档包含了您的代码。 https://docs.djangoproject.com/en/1.4/ref/contrib/csrf/
我可能认为这也适用于django 1.0,因为您对代码的处理基本上只是将jquery函数添加到页面加载的任何js文件中。 对于1.4版,我们必须在django模板的表单元素中添加{%csrf_token%}标签。试试这个!