#python #html #django
#питон #HTML #джанго
Вопрос:
Как я могу хранить файлы в Django в модели?
Ну, я знаю о FileField, но я не понимаю, как это работает, дело в том, что я хочу иметь возможность хранить файл и не указывать путь, например, я создаю веб-сайт облачного хранилища для проекта и хочу иметь возможность хранить файл.
И как я могу изменить имя файла, когда пользователь захочет его изменить?
Комментарии:
1. файлы не помещаются в базу данных, если вы не собираетесь раздувать ее с помощью двоичных файлов. отсюда и путь. в фактическую файловую систему
2. итак, что мне делать.
3. например, я должен сохранить путь к файлу
4. итак, что произойдет, если я получу файл через входной тег (type=file)
Ответ №1:
Я попытаюсь просто объяснить, как это работает, поскольку это поможет вам выбрать наилучшее решение для вас.
- Локальное системное хранилище.
Вы сохраняете путь в базе данных и устанавливаете класс хранилища в поле as, FileSystemStorage
что означает, что django будет знать, что нужно записывать и читать с жесткого диска той же системы, на которой запущено ваше приложение django. Таким образом, в основном вы храните обычные файлы со ссылками на их местоположение в каталоге.
- Облачное хранилище.
Аналогично локальной системе, но вместо локального пути вы сохраняете местоположение uri, а вместо локальной системы вы будете извлекать файл по сети либо через http, либо по пользовательскому протоколу, такому как s3. Для достижения этой цели вам необходимо объявить пользовательский класс хранилища, в котором вы определяете свои пользовательские save
и delete
методы для загрузки и удаления из вашего облачного хранилища.
Вы можете написать свой собственный: https://docs.djangoproject.com/en/3.1/howto/custom-file-storage /
Или используйте библиотеку: https://github.com/jschneier/django-storages
- Хранилище базы данных
Если вы знаете, что файлы являются текстовыми, вы можете прочитать их и сохранить текст непосредственно в базе данных с соответствующими метаданными. Если они двоичные, вы можете сохранить их как большой двоичный объект — риск здесь заключается в низкой производительности и риске раздувания базы данных. AFAIK, лучше хранить двоичные файлы вне базы данных.
Комментарии:
1. И если вы можете, не могли бы вы подробнее рассказать о пользовательском хранилище в Django. Спасибо, Натан
2. Ссылка на документацию, которую я разместил для написания пользовательских хранилищ, работает лучше, чем я мог. Я рекомендую вам просто попробовать реализовать один из этих примеров, и вы начнете понимать, как это работает.