Как удалить джанго с компьютера
Я использую 1.2.5 со стандартным ImageField и с помощью встроенного хранилища. Файлы загружаются нормально, но когда я удаляю запись из admin, фактический файл на сервере не удаляется.
вы можете получить pre_delete или post_delete сигнал (см. комментарий @toto_tico ниже) и вызовите метод delete на объекте FileField, таким образом (в models.py):
Django 1.5 решение: я использую post_delete по различным причинам, которые являются внутренними для моего приложения.
Я застрял это в нижней части models.py файл.
the
этот код хорошо работает на Django 1.4 также с панелью администратора.
важно получить хранилище и путь перед удалением модели или последняя будет сохраняться пустой также при удалении.
вы нужно удалить сам файл как delete и update .
может быть, уже немного поздно. Но самый простой способ для меня-использовать post_save сигнал. Просто помните, что сигналы исключаются даже во время процесса удаления QuerySet, но [модель].метод delete () не исключается во время процесса удаления QuerySet, поэтому это не лучший вариант для его переопределения.
core/models.py:
core/signals.py
эта функциональность будет удалена в Django 1.3, поэтому я бы не стал полагаться на нее.
вы можете переопределить delete метод рассматриваемой модели для удаления файла перед полным удалением записи из базы данных.
Edit:
вот краткий пример.
использование post_delete-это наверняка правильный путь. Хотя иногда все может пойти не так, и файлы не удаляются. Конечно, есть случай, когда у вас есть куча старых файлов, которые не были удалены до использования post_delete. Я создал функцию, которая удаляет файлы для объектов, основанных на том, что если файл, на который ссылается объект, не существует, то удалите объект, если в файле нет объекта, а затем удалите, также он может удалить на основе "активного" флага для объекта.. Что-то я добавил к большинству моих моделей. Вы должны передать ему объекты, которые вы хотите проверить, путь к файлам объектов, поле файла и флаг для удаления неактивных объектов:
Это, как вы можете использовать это:
убедитесь, что вы пишете " self" до файла. так что пример выше должен быть
Я забыл "себя" перед моим файлом, и это не сработало, поскольку он искал в глобальном пространстве имен.
Если у вас уже есть количество неиспользуемых файлов в вашем проекте и вы хотите удалить их, вы можете использовать утилиту django django-unused-media
у меня может быть особый случай, так как я использую опцию upload_to в моем поле файла с динамическими именами каталогов, но решение, которое я нашел, было использовать ОС.команда rmdir.
модели:
.
При работе над проектами Python нам иногда требуется набор библиотек и пакетов. По умолчанию все библиотеки и пакеты, которые мы устанавливаем, установлены для Python, установленного глобально в нашей системе. Иногда это может вызвать несколько проблем.
Предположим, что в вашей системе глобально установлен Python 3.9, и несколько ваших проектов его используют. Теперь у вас возникла отличная идея и вы начали искать в Интернете все ресурсы, которые понадобятся вам для реализации своей идеи.
Вы обнаружите, что для вашего проекта вам понадобится библиотека Python XYZ, но при условии, что для работы этой библиотеки требуется Python 3.6. Но на вашем компьютере установлен Python 3.9, и его удаление приведет к поломке всех остальных проектов. Кроме того, вы не можете отказаться от идеи и начать воплощать идеи в жизнь на основе версии Python, установленной на вашем компьютере.
Итак, чтобы избежать таких конфликтов, используются виртуальные среды.
Виртуальная среда Python
Виртуальная среда - это изолированная среда Python, созданная для проекта. В этой среде есть собственный интерпретатор Python, библиотеки и пакеты, что означает, что интерпретатор Python и установленные зависимости принадлежат только этому проекту. У нас могут быть разные версии Python и разные библиотеки для разных проектов с виртуальными средами, не накапливая глобально установленные зависимости.
При запуске нового проекта всегда рекомендуется создавать виртуальную среду и использовать ее специально для этого проекта.
Настроить виртуальную среду
Создать виртуальную среду для ваших проектов Python несложно. Для создания виртуальной среды нам понадобится пакет Python, а именно virtualenv . Этот пакет можно установить с помощью следующей команды pip .
Создать виртуальную среду
Чтобы создать виртуальную среду, выполните в консоли следующую команду.
environment - это имя виртуальной среды. Вы можете дать ему любое имя. По умолчанию версия этой среды для Python будет такой же, как версия Python, установленная глобально на вашем компьютере или в верхней части переменных среды, если у вас несколько версий Python.
Чтобы создать среду с пользовательской версией Python, используйте следующую команду. Убедитесь, что на вашем компьютере установлена эта версия Python. В противном случае выдаст ошибку.
Итак, если у вас есть Python 3.9 и 3.7 на вашем компьютере и вы хотите создать среду с Python 3.7 в Windows, ваша команда будет выглядеть так. (Учитывая расположение Python по умолчанию)
Активировать виртуальную среду
Перед активацией среды убедитесь, что в рабочем каталоге консоли есть виртуальная среда.
Чтобы активировать виртуальную среду в Windows, используйте следующую команду.
Для Mac и Linux используйте следующую команду.
Чтобы деактивировать виртуальную среду, выполните следующую команду.
При работе с базами данных нам часто приходится перезагружать базу данных, потому что мы заполняем ее бесполезными данными. Иногда мы даже создаем базу данных на основе схемы базы данных, подверженной ошибкам. Иногда мы даже меняем бизнес-логику, которая корректирует весь дизайн базы данных. Эти ситуации довольно распространены в области компьютерных наук, и для их обработки созданы несколько хороших инструментов и команд.
- Сбросить всю базу данных
- Вернуть приложение Django к некоторым старым миграциям.
Сбросить всю базу данных в Django
- Если мы используем базу данных SQLite по умолчанию в Django, мы можем удалить файл базы данных db.sqlite3 , а затем удалить все папки migrations во всех приложениях. После удаления папок migrations мы можем переделать миграции и перенести их с помощью двух команд; а именно python manage.py makemigrations и python manage.py migrate .
- Если мы используем какую-либо другую реляционную базу данных, такую как PostgreSQL или MySQL, мы можем либо удалить все таблицы с помощью инструмента управления базой данных, такого как pgAdmin , DBeaver и т. Д., Либо вручную, используя командную строку. Или мы можем создать совершенно новую базу данных, а затем подключить ее к нашему проекту Django. Обратите внимание, что в обоих случаях нужно сначала удалить все папки migrations , а затем заново выполнить миграции и, наконец, перенести их.
- Другой вариант - использовать команду Django manage.py , чтобы очистить для нас всю базу данных. Команда - python manage.py flush . Опять же, после использования этой команды мы должны удалить все папки migrations , а затем выполнить новые миграции.
Вернуть приложение Django к его старым миграциям
Если нам не нужно сбрасывать всю базу данных, а откатывать миграции для определенного приложения Django, у нас есть два варианта для этого. Во-первых, мы можем отменить текущие миграции приложения Django на некоторые старые миграции. Во-вторых, мы можем сбросить все миграции для приложения Django.
Если нам нужно вернуться с какой-то последней миграции, скажем, 0014, на более старую миграцию, скажем, 0008, мы можем использовать следующие команды.
И, если нам нужно сбросить все миграции для приложения Django, мы можем использовать следующую команду.
Обратите внимание, что иногда миграции могут быть необратимыми. Как правило, это состояние возникает, когда в модели Django были внесены некоторые существенные изменения. Когда мы попытаемся вернуться к такой миграции, Django выдаст IrreversibleError .
Сопутствующая статья - Django Migration
какова процедура полного удаления приложения Django, в комплекте с удалением базы данных?
Django sqlclear docs для получения дополнительной информации. В принципе, работает ./manage.py sqlclear my_app_name получает вас сделать в SQL, которые должны быть выполнены, чтобы избавиться от всех следов приложения в вашей БД. Вам все равно нужно скопировать и вставить (или передать) эти операторы в ваш клиент SQL. Для Django 1.7 и выше, использовать ./manage.py migrate my_app_name zero (см. migrate docs), который запускает очистку базы данных автоматически.
чтобы удалить приложение из вашего проекта, все, что вам нужно сделать, это удалить его из INSTALLED_APPS в вашем проекте settings.py . Django больше не будет загружать приложение.
если вы больше не хотите, чтобы файлы приложения висели вокруг, удалите каталог приложения из каталога проекта или другого места на вашем PYTHONPATH, где он находится.
(необязательно) если приложение хранит носитель файлы, файлы кэша или другие временные файлы где-то, вы можете удалить их, а также. Также будьте осторожны с затяжными данными сеанса, которые могут остаться от приложения.
(необязательно) я бы также удалил все устаревшие типы контента.
- прокомментируйте settings.py на INSTALLED_APPS ненужная строка приложения
- удалить все папке __pycache__ и migrate в проекте
- удалить ненужную модель в models.py
- удалить импорт ссылке views.py , admin.py конец etc.
- удалить все ссылки в urls.py на вашем ненужном приложении
- в базе данных удалить ненужные таблицы, которые связаны с приложением (я делаю это с помощью программы помощи "Студия Валентина")
- удалить приложения папку
- в командной строке сделать это: python manage.py migrate и python manage.py syncdb
приложение django - это "набор" файлов *.py и каталог с именем django-app. Таким образом, вы можете просто удалить всю папку со всеми файлами *.py
для "удаления" таблиц из БД необходимо использовать DELETE FROM <app-name_table-names>
кроме того, вы должны удалить строки с именем приложения из setting.py в корневом каталоге
Я действительно люблю шаги от в этой статье - это миграция поддержка.
возможно, его нужно адаптировать в двух обновлениях кода , но он выглядит действительно безопасным, когда вам приходится работать со многими развертываниями (например: этап тестирования, бета - версия и производство-в моем случае)
Читайте также: