每当我尝试在Django 1.2上使用SWFUpload上传文件时,都会收到HTTP 403错误。我确定这是一个CSRF错误,因为当我使用@csrf_exempt装饰器工作正常。
window.onload = function {
var settings = {
...
post_params: {
"csrfmiddlewaretoken": "{{csrf_token}}"
},
...
};
var swfu = new SWFUpload(settings);
};
我还尝试使用SWFUpload.addPostParam()但没有成功
var swfu = new SWFUpload(settings);
swfu.addPostParam('csrfmiddlewaretoken', '{{csrf_token}}');
我确定我将令牌传递给模板,因为我可以在源代码中看到它。 我上传到的目录是可写的。我chmod 777吧。
有什么想法吗?
答案 0 :(得分:0)
除了post params中的“csrfmiddlewaretoken”之外,django还希望正确设置CSRF cookie,否则用户将收到404错误。
在您的中间件中将会话令牌复制到cookie中,同样复制csrftoken也可以。我按照http://blog.fogtunes.com/2009/11/howto-integrate-swfupload-with-django/的说明更新了中间件部分,如下所示,它可以工作:
class SWFUploadMiddleware(object):
def process_request(self, request):
if (request.method == 'POST') and (request.path == reverse('uploads.views.manual')) :
if request.POST.has_key(settings.SESSION_COOKIE_NAME):
request.COOKIES[settings.SESSION_COOKIE_NAME] = request.POST[settings.SESSION_COOKIE_NAME]
if request.POST.has_key('csrftoken'):
request.COOKIES['csrftoken'] = request.POST['csrftoken']