Загружайте файлы в 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-запросы и, возможно, содержат ошибки.
Это должно помочь вам получить больше информации, которая поможет вам решить вашу проблему. Вы всегда можете обновить свой вопрос, добавив дополнительную информацию, полученную в результате указанных выше действий.