2

Django 1.2 で SWFUpload を使用してファイルをアップロードしようとすると、HTTP 403 エラーが発生します。@csrf_exempt デコレータを使用すると正常に動作するため、これは CSRF エラーであると確信しています。

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しました。

何か案は?

4

1 に答える 1

0

post パラメータの "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']   
于 2011-02-26T15:12:29.817 に答える