Как я могу хранить файлы в Django

#python #html #django

#питон #HTML #джанго

Вопрос:

Как я могу хранить файлы в Django в модели?

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

И как я могу изменить имя файла, когда пользователь захочет его изменить?

Комментарии:

1. файлы не помещаются в базу данных, если вы не собираетесь раздувать ее с помощью двоичных файлов. отсюда и путь. в фактическую файловую систему

2. итак, что мне делать.

3. например, я должен сохранить путь к файлу

4. итак, что произойдет, если я получу файл через входной тег (type=file)

Ответ №1:

Я попытаюсь просто объяснить, как это работает, поскольку это поможет вам выбрать наилучшее решение для вас.

  1. Локальное системное хранилище.

Вы сохраняете путь в базе данных и устанавливаете класс хранилища в поле as, FileSystemStorage что означает, что django будет знать, что нужно записывать и читать с жесткого диска той же системы, на которой запущено ваше приложение django. Таким образом, в основном вы храните обычные файлы со ссылками на их местоположение в каталоге.

  1. Облачное хранилище.

Аналогично локальной системе, но вместо локального пути вы сохраняете местоположение uri, а вместо локальной системы вы будете извлекать файл по сети либо через http, либо по пользовательскому протоколу, такому как s3. Для достижения этой цели вам необходимо объявить пользовательский класс хранилища, в котором вы определяете свои пользовательские save и delete методы для загрузки и удаления из вашего облачного хранилища.

Вы можете написать свой собственный: https://docs.djangoproject.com/en/3.1/howto/custom-file-storage /

Или используйте библиотеку: https://github.com/jschneier/django-storages

  1. Хранилище базы данных

Если вы знаете, что файлы являются текстовыми, вы можете прочитать их и сохранить текст непосредственно в базе данных с соответствующими метаданными. Если они двоичные, вы можете сохранить их как большой двоичный объект — риск здесь заключается в низкой производительности и риске раздувания базы данных. AFAIK, лучше хранить двоичные файлы вне базы данных.

Комментарии:

1. И если вы можете, не могли бы вы подробнее рассказать о пользовательском хранилище в Django. Спасибо, Натан

2. Ссылка на документацию, которую я разместил для написания пользовательских хранилищ, работает лучше, чем я мог. Я рекомендую вам просто попробовать реализовать один из этих примеров, и вы начнете понимать, как это работает.