Ошибка Ajax POST в Django - PullRequest
       10

Ошибка Ajax POST в Django

0 голосов
/ 25 февраля 2011

Я делаю POST-запрос Ajax, и он не распознается на мой взгляд.

Код в views.py:

@csrf_exempt
def upload(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
        #handle_uploaded_file(request.FILES['file'])
        f = request.FILES['file']
            global globalVarForToTrackUpload
            global globalFileSizeVariable
        globalFileSizeVariable = f.size
        filename = "/static/Data/" + f.name
        destination = open(filename, 'wb+')
        for chunk in f.chunks():
        destination.write(chunk)
        globalVarForToTrackUpload += len(chunk)
        destination.close()
            #return render_to_response('uploadsuccess.html')
        allValues = str(globalVarForToTrackUpload) + " : " + str(globalFileSizeVariable)
        return HttpResponse(allValues)
    else:
        form = UploadFileForm()
    return render_to_response('upload.html', {'form': form})

Мои настройки промежуточного ПО:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.csrf.CsrfResponseMiddleware',
)

Моя функция javascript:

function submitForm()

{

    //document.forms["myForm"].submit();

    xhrPost = getXhrObject();
    var arrFiles = document.getElementById('id_file');
    var fileToUpload = arrFiles.files[0];
    xhrPost.onreadystatechange = function() {
        if(xhrPost.readyState == 4 && xhrPost.status == 200)
            document.getElementById("upload-progress-bar").innerHTML = xhrPost.responseText;
        else
            document.getElementById("upload-progress-bar").innerHTML = "processing upload...";
    }

    xhrPost.open("POST","/upload.psp/",true);

    var boundary = "AJAX--------------" + (new Date).getTime();
    var contentType = "multipart/form-data; boundary=" + boundary;
        xhrPost.setRequestHeader("Content-Type", contentType);
    xhrPost.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));

    xhrPost.send(fileToUpload);

    return false;

}

Кто-нибудь может сказать мне, что мне не хватает?Почему запрос не распознается как "POST" в моей функции "загрузки" внутри views.py?

Заранее спасибо.

1 Ответ

2 голосов
/ 03 марта 2011

Используйте request.raw_post_data в вашем представлении. Как-то так:

if request.is_ajax():
     source = request.raw_post_data
     #Save or/and modify your file
else:
    #As usual

Кстати, я не знаю, как получить файл кусками. Может быть, кто-то знает.

...