Я пытаюсь загрузить файлы в 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
при создании объекта выдает ошибку.Кроме этой строки, приведенный выше код работает полностью.