Загружайте файлы в Django, используя Uploadify, получая код ответа HTTP 403

Я пытаюсь загрузить файлы в Django, используя Uploadify, следуя этому руководству. Я выполнил все шаги правильно. В дополнение к этому я сделал модель, в которой храню информацию о загружаемых файлах.

Мой шаблон содержит это

<script type="text/javascript" src="{{ STATIC_URL }}uploadify/swfobject.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}uploadify/jquery.uploadify.v2.1.4.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $('#file_upload').uploadify({
            'uploader'  : '{{ STATIC_URL }}uploadify/uploadify.swf',
            'script'    : '{% url upload_file %}',
            'cancelImg' : '{{ STATIC_URL }}uploadify/cancel.png',
            'auto'      : true,
            'multi'     : true,
            'fileExt'   : '*.doc;*.docx;*.pdf',
            'fileDesc'  : 'Upload Docs',
            'queueID'   : 'file_upload_queue',
            'removeCompleted': false,
        });
    });
</script>

<h2 id="smallHeading"> Upload your Documents </h2>
<input id="file_upload" type="file" name="Filedata" />
<a href="javascript:$('#file_upload').uploadifyUpload();">Upload Files</a>

Мой файл url.py содержит эту строку

  url(r'^upload/$', 'userprofile.views.upload_file', name='upload_file'), 

и вид

@csrf_exempt
def upload_file(request):
    if request.method == "POST":
        upload_file = request.FILES['Filedata']
        upload_instance = Uploads.objects.create(creator = request.user, uploaded_on = datetime.datetime.now())
    upload_instance.file.save(upload_file.name,upload_file)
    upload_instance.save()

    response = HttpResponse()
    response.write("%s\r\n" % upload.name)
    return response

и мой models.py содержит

def get_file_path(instance, filename):
    return os.path.join('userprofiles', str(instance.creator.id), filename)

class Uploads(models.Model):
    file = models.FileField(upload_to=get_file_path)
    creator = models.ForeignKey(User)
    uploaded_on = models.DateTimeField()

Но здесь ничего не происходит. Все, что я получаю, это кнопка загрузки, я выбираю файлы, но ничего не происходит. Кто-нибудь может помочь мне выяснить, что происходит? Кажется script не уволен. Я знаю это, потому что раньше у меня была ошибка в моих взглядах, но никакой ошибки не возникало.

Любая помощь высоко ценится.

Редактировать:

Я не вижу ничего в firebug консоль, а net Панель также не показывает никаких POST запрос, но django debugger показывает запрос POST для загрузки файла с 403 ответ. я использовал csrf_exempt тогда почему это должно быть forbidden?

Решение: я наконец-то решил проблему. Про ошибку 403 я узнал кое-что интересное по этой ссылке. Если представление имеет декоратор csrf_exempt и если для этого представления есть ошибка 404, то django показывает ошибку 403.

Фактическая проблема заключалась в том, что изначально моя ссылка была неправильной, поэтому, когда я ее исправил, я перестал получать ошибку 403, но я начал получать ошибку 500. Это означало, что что-то не так с точки зрения. И так как uploadufy ничего не регистрирует в firebug, мне пришлось отлаживать, переходя строку в моем представлении.

Похоже, что объект запроса, отправленный uploadify сценарий не завершен и строка creator = request.user при создании объекта мне давали ошибку. Кроме этой строки, приведенный выше код работает полностью.

1 ответ

Я предлагаю продолжить отладку, чтобы увидеть, заключается ли проблема в клиентских скриптах Java или в коде Django на стороне сервера.

Загрузите плагин Firebug для Firefox. Загрузите свою страницу. Откройте Firebug и перейдите на вкладку "Net". Убедитесь, что все скрипты Java загружены. Затем проверьте консоль, чтобы увидеть, есть ли какие-либо ошибки JavaScript. Следующая проверка журналов Django, чтобы увидеть, поступают ли какие-либо HTTP-запросы и, возможно, содержат ошибки.

Это должно помочь вам получить больше информации, которая поможет вам решить вашу проблему. Вы всегда можете обновить свой вопрос, добавив дополнительную информацию, полученную в результате указанных выше действий.

Другие вопросы по тегам