Урок #11 — Редактирование и удаление записей. Завершение
В уроке мы завершим работу над сайтом, а также добавим в него функции по редактированию и удалению записей. Все функции мы реализуем через использование встроенных классов в Django.
Видеоурок
Редактирование и удаление
Как видите, удаление и редактирование записей можно осуществить лишь за пару строк кода. В этом нам помогают встроенные классы в Django, которые позволяют быстро реализовать необходимый функционал внутри приложения.
Для реализации обновления используйте класс UpdateView , а для удаления – DeleteView .
Что дальше?
Теперь ваших знаний достаточно, чтобы начать создавать ваши первые веб-сайты на Django. На закрепления знаний мы предлагаем вам просмотреть один большой урок по изучению Django за час:
Также, если вы плохо разбираетесь в HTML , CSS , JavaScript или же Bootstrap , то все курсы по этим технологиям вы можете посмотреть у нас на сайте.
Программа обучения
Также на нашем сайте есть более углубленная программа по изучению языка Питон и его библиотек. Ознакомится с программой обучения можно по этой ссылке .
Как удалить джанго
Рассмотрим пример с редактированием и удалением объектов модели на примере модели Person:
from django.db import models class Person(models.Model): name = models.CharField(max_length=20) age = models.IntegerField()
Обновление
save()
Для обновления объекта также применяется метод save() :
bob = Person.objects.get(id=2) bob.name = "Bob" bob.save()
В этом случае Django полностью обновляет объект, все его свойства, даже если мы их не изменяли. Чтобы указать, что нам надо обновить только определенные поля, следует использовать параметр update_fields :
from .models import Person bob = Person.objects.get(id=1) bob.name = "Robert" bob.save(update_fields=["name"])
Это позволит повысить производительность.
update()
Другой способ обновления объектов представляет метод update() (и его асинхронная версия aupdate() ) в сочетании с методом filter , которые вместе выполняют один запрос к базе данных:
from .models import Person number = Person.objects.filter(id=1).update(name="Mike") print(result) # количество обновленных строк
В данном случае у объектов с устанавливаем для поля name значение «Mike». Метод возвращает количество обновленных строк.
Если нам не надо получать обновляемый объект, то данный способ позволит нам увеличить производительность взаимодействия с бд.
Также можно установить и большое количество полей:
Person.objects.filter(id=1).update(name="Mike", age = 33)
Иногда бывает необходимо изменить значение столбца в бд на основании уже имеющегося значения. В этом случае мы можем использовать функцию F() :
from .models import Person from django.db.models import F Person.objects.all(id=2).update(age = F("age") + 1)
В данном случае полю age присваивается уже имеющееся значение, увеличенное на единицу.
При этом важно учитывать, что метод update обновляет все записи в таблице, которые соответствуют условию.
Если надо обновить вообще все записи, вне зависимости от условия, то необходимо комбинировать метод update с методом all() :
from .models import Person from django.db.models import F Person.objects.all().update(name="Mike") Person.objects.all().update(age = F("age") + 1)
update_or_create()
Метод update_or_create (и его асинхронная версия aupdate_or_create() ) обновляет запись, а если ее нет, то добавляет ее в таблицу:
values_for_update= bob, created = Person.objects.update_or_create(id=2, defaults = values_for_update)
Метод update_or_create() принимает два параметра. Первый параметр представляет критерий выборки объектов, которые будут обновляться. Второй параметр представляет объект со значениями, которые получат выбранные объекты. Если критерию не соответствует никаких объектов, то в таблицу добавляется новый объект, а переменная created будет равна True.
bulk_update()
Метод bulk_update() (и его асинхронная версия abulk_update() ) позволяет обновить за один раз набор объектов.
bulk_update(objs, fields, batch_size=None)
Первый параметр — obj указывает на обновляемые объекты, а второй параметр — fields представляет обновляемые поля с новыми значениями. Последний параметр — batch_size указывает, сколько объектов обновляется в одном запросе (по умолчанию обновляются все объекты)
from .models import Person first_person = Person.objects.get(id=1) first_person.name = "Tomas" second_person = Person.objects.get(id=2) second_person.age = 29 number = Person.objects.bulk_update([first_person, second_person], ["name", "age"]) print(number) # 2
В данном случае у первого объекта обновляется значение поля «name», а у второго — значение поля «age». Поэтому в качестве второго параметра передается список с данными полями. Результатом метода является количество обновленных объектов.
Данный метод имеет некоторые ограничения. В частности, мы не можем обновить значение первичного ключа. Также если в обновляемом наборе есть дубли, то только первое вхождение объекта будет использоваться для обновления.
Удаление
Для удаления мы можем вызвать метод delete() (либо его асинхронную версию adelete() ) у удаляемого объекта:
person = Person.objects.get(id=2) person.delete()
Если не требуется получение отдельного объекта из базы данных, тогда можно удалить объект с помощью комбинации методов filter() и delete() :
Person.objects.filter(id=4).delete()
Удаление всех данных из таблицы:
Person.objects.all().delete()
# Спектр
(opens new window) — сервис для размещения сайтов на CMS WordPress, Joomla! и 1С-Битрикс.
# Статьи и руководства
Для вашего удобства мы собрали статьи и руководства по использованию Джино.Спектра в одном месте.
- WinSCP: основы работы с программой
- Как загрузить сайт на Спектр через программу WinSCP
# Работа с сайтом
# Создание нового сайта
(opens new window) можно создать новый сайт на выбранной CMS или перенести уже имеющийся проект с другого хостинга на Джино.
При первом создании сайта на выбранной CMS можно подключить бесплатный деморежим на 10 дней — сайт будет доступен и полностью функционален. По истечении 10 дней сайт автоматически переключится в платный режим с посуточной тарификацией.
Новые сайты на Спектре можно создавать за 450 Джино.Плюсов+: сайт будет в первый месяц работать бесплатно, после чего перейдёт в режим с посуточной тарификацией.
Сайты на CMS Joomla! и WordPress создаются автоматически. Для создания сайта на 1С-Битрикс нужно зарегистрироваться на официальном сайте проекта
Размещать на Спектре свои скрипты нельзя. Рекомендуем использовать для этого Джино.Хостинг
Для работы вашего сайта вам понадобится доменное имя. Зарегистрировать новое доменное имя, привязать к Спектру уже имеющееся или полностью перенести домен на Джино можно в разделе Домены .
# Резервное копирование сайта
Бэкапы ваших сайтов на Джино.Спектре создаются автоматически с периодичностью 1 раз в 2-11 дней и хранятся в течение 20 дней. Создать резервную копию вручную можно в разделе Управление
Резервные копии . Здесь же будет отображаться список всех резервных копий вашего сайта.
Чтобы восстановить сайт из резервной копии, нажмите на значок вращающейся стрелки «Восстановить» возле нужной копии — все текущие файлы сайта будут заменены файлами из бэкапа.
# Перенос сайтов на Джино.Спектр
Механизмы переносов сайтов со сторонних хостингов на Джино различаются в зависимости от выбранной CMS:
-
сайты на Joomla! можно перенести автоматически при помощи формы переноса
Также вы можете самостоятельно перенести ваши сайты:
- создайте проект на нужной CMS;
- поместите файлы сайта, который переносите, в папку site;
- дамп базы данных переносимого сайта поместите в специально созданную для него новую базу.
Параметры для подключения к FTP и MySQL находятся в разделе Управление
# Удаление сайта
Удалить сайт можно в разделе Управление
Удалить сайт, работающий в деморежиме, нельзя.
При удалении сайта уничтожатся все файлы и базы данных.
Восстановить свой сайт из резервной копии можно при создании нового проекта.
# Управление сайтом
# Основные настройки
Общая информация о вашем проекте собрана в разделе Управление
Основные настройки . Здесь есть основная информация о сайте, также в этом разделе можно включить автоматическое обновление CMS или самостоятельно обновить её до последней версии (принцип автообновления зависит от особенностей выбранной CMS).
Здесь же можно установить любую из доступных версий PHP, подключить функцию ionCube Loader
Используется для работы с модулями и расширениями, исходный код которых закодирован с помощью IonCube
и Ускорение с помощью PageSpeed
Автоматическая оптимизация HTML-страниц, файлов стилей, скриптов и изображений для ускорения загрузки страниц
По умолчанию у нас используются последние стабильные версии PHP, но при необходимости вы можете установить и более ранние версии.
Здесь же можно добавить Выделенный IP для сайта: он будет перенесён на отдельный IP, где нет других сайтов.
Переход на выделенный IP проходит незаметно для ваших посетителей: в момент обновления DNS-записей все сайты доступны и на общем IP-адресе. Подключить выделенный IP можно только после завершения деморежима работы сайта.
Выделенные IP-адреса можно переносить с одного сайта на другой. После переноса IP-адрес останется прежним. Это упрощает тестирование работы проектов и их обновление. Чтобы подключить выделенный IP к другому сайту, откройте раздел Управление
Основные настройки в контрольной панели исходного сайта. В строке «Выделенный IP» нажмите на кнопку «Перенос». В появившемся окне выберите сайт, на который хотите перенести данный адрес.
# Настройки безопасности
Чтобы уменьшить риск взлома сайтов, по умолчанию включена функция Дополнительная защита. Она запрещает исполнение скриптов в директориях, не предназначенных для этого, а также закрывает некоторые другие уязвимости.

Для работы некоторых устанавливаемых расширений может потребоваться отключение Дополнительной защиты. Мы рекомендуем не использовать такие расширения и поискать альтернативные варианты.
На CMS Joomla! есть дополнительная настройка безопасности — Защита панели администрирования. После включения этой функции панель администратора будет защищена дополнительным паролем. Без него доступ к административному интерфейсу будет невозможен, что значительно затруднит подбор основного пароля.
При входе в панель администрирования через интерфейс Джино или по прямой ссылке вводить дополнительные логин и пароль не потребуется.
На CMS Bitrix настройки безопасности отсутствуют, так как система уже оснащена защитными функциями.
# Доступ в панель администрирования
В разделе Управление
Основные настройки можно узнать логин и задать пароль для входа в панель администрирования сайта.
Сам вход в панель администрирования осуществляется из окна «Сводка» нажатием на кнопку Администрирование .

# Расширения
На вкладке «Расширения» в разделе Управление
Основные настройки представлен список модулей, плагинов и тем, доступных для подключения. Их список зависит от выбранной CMS.
# Файловый менеджер
Для работы с файлами и папками вашего сайта можно использовать файловый менеджер, представленный в разделе Управление
С его помощью можно создавать папки, файлы, ссылки и управлять ими — копировать, перемещать, удалять, редактировать, добавлять в архив, извлекать из архива и т. д. Загружать файлы можно не только с вашего устройства, но и по URL. Для работы с папкой нажмите на неё левой кнопкой мыши.

Также вы можете нажать на папку или файл правой кнопкой мыши, появятся некоторые дополнительные функции.
Сразу после создания Спектра в файловом менеджере можно будет увидеть 3 системные папки:
- site — папка для хранения всех файлов вашего сайта;
- logs — для логов работы вашей CMS;
- tmp — для хранения временных файлов, например, кэша.
Удалённые файлы и папки попадают в папку trash, которая автоматически создаётся в директории /root.
Чтобы восстановить файл или папку из корзины, зайдите в папку trash и скопируйте их, а затем вставьте на прежнее место в файловом менеджере.
- Если вы удалили какую-либо системную папку из корзины, её будет нужно создать вручную заново.
- Содержимое корзины занимает часть дискового пространства — не забывайте очищать её.
# Консоль
Управлять сайтами можно прямо из панели управления через веб-консоль. Нет необходимости скачивать отдельное приложение, вводить адрес сервера и пароль или открывать терминал. Перейдите в раздел Управление
Консоль , терминал откроется автоматически в новой вкладке браузера.
При переключении страниц можно продолжать работу с консолью без разрыва сессии. Доступны все функции, которые есть у обычного терминала — можно создавать и удалять папки, изменять настройки, просматривать логи. Также с помощью веб-консоли вы сможете устранять неполадки сервера, сбрасывать учётные данные, проводить быструю проверку состояния VPS. Все изменения будут сразу отображаться в контрольной панели. Например, в файловом менеджере можно увидеть только что созданную папку. При перезагрузке веб-страницы консоль обновляется.
# Задания по расписанию
Для периодического выполнения заданий на Джино используется классический планировщик задач Cron. Подробное описание работы веб-интерфейса планировщика представлено в разделе «Работа планировщика задач».

Чтобы создать лог работы планировщика, включите функцию Логировать результат выполнения задания. Логи работы Cron хранятся в файле /logs/cron.log, посмотреть который можно с помощью файлового менеджера или путём подключения к вашему Спектру по SSH.
Функция E-mail для отчётов нужна для получения отчётов о выполнении заданий по расписанию. Если хотите получать на e-mail отчёты о выполнении заданий, укажите свой адрес в соответствующем поле.
# Антивирус
С помощью встроенного антивируса вы можете проверить файлы своих сайтов на наличие в них вредоносного кода.
Для запуска проверки зайдите в раздел Управление
Антивирус , воспользуйтесь функцией Обзор и укажите папку, которую нужно проверить.
Внизу страницы появится строка с информацией о текущей проверке:
- дата и время;
- путь к проверяемым файлам и папкам;
- количество проверенных объектов;
- количество заражённых объектов.

Данные обновляются автоматически. Если вам нужно отменить текущую проверку, наведите курсор на эту строку и нажмите на появившуюся справа иконку. Как только проверка завершится, вы увидите оповещение об этом вверху страницы.
Встроенный антивирус Джино проверяет не только файлы сайта, но и скрипты в заданиях по расписанию. Проверки проводятся регулярно в фоновом режиме, но вы также можете запустить их вручную в любой момент. Если проверка обнаружит заражённые файлы, вы получите уведомление об этом на почту и в Телеграм
(opens new window) . Найденные файлы вы сможете удалить или отредактировать — удалить вредоносный код.
Проверка сайта на вирусы может длиться долго, но на его работоспособность это не влияет. Если проект содержит большое количество файлов и папок, его лучше проверять на вирусы по частям.
После обнаружения и удаления вредонсного кода из файлов сайта примите следующие меры:
- проверьте на вирусы компьютер, с которого вы работаете с сайтом: на нём могут быть троянские программы, с помощью которых злоумышленник получает доступ к паролям от хостинга;
- проведите экспертный анализ пользовательских скриптов на наличие уязвимостей и обновите версию CMS до последней;
- убедитесь, что сайт работает на последней актуальной версии PHP;
- смените пароль от административной учётной записи, хостинга, FTP и SSH;
- включите дополнительную защиту в разделе Управление
Мы следим за безопасностью наших серверов, поэтому взлом с их стороны практически невозможен. Но если ваш компьютер или мобильное устройство не защищены от вирусов, то и ваши сайты будут под угрозой заражения. Найденные и удалённые вирусы могут возвращаться снова. На Джино можно не только проверить проект, но и приобрести антивирус для компьютера от NANO Antivirus Pro.
Более подробно о способах заражения сайтов вредоносным ПО, а также о методах борьбы с вирусами можно прочитать в нашем Журнале.
# Удалённый доступ
# FTP / SSH
В разделе Управление
Удалённый доступ можно добавить каналы связи для подключения к вашему Спектру — FTP-подключение и SSH-подключение.

Имя сервера, логин и пароль создаются автоматически. Их нельзя изменить, можно только перегенерировать пароль.
Для подключения по FTP и SSH используются стандартные порты 21 и 22 соответственно.
Если вы не разрешите доступ к хостингу по FTP без шифрования, подключение будет возможно только с помощью безопасных протоколов FTPS и SFTP. Для доступа по FTPS нужно выбрать соответствующую функцию в вашем FTP-клиенте, данные для FTPS-доступа полностью совпадают с данными для FTP-доступа.
Для SFTP-соединения используется порт 2222. Остальные данные совпадают с данными FTP-доступа.
Отпечатки SSH-ключей
При первом подключении ваш SSH-клиент выводит на экран отпечаток открытого ключа сервера, к которому пытается подключиться. Чтобы убедиться, что вы подключаетесь к правильному серверу, сравните полученное значение с одним из ключей, приведённых в разделе Управление

После подтверждения отпечаток сохраняется и проверяется автоматически при каждом последующем соединении. Если отпечаток ключа сервера изменится (например, из-за переноса вашего аккаунта на другой сервер), SSH-клиент выведет предупреждение.
Несовпадение отпечатка ни с одним из значений, перечисленных в разделе Управление
Удалённый доступ , может означать попытку перехватить ваше соединение злоумышленником или неправильную настройку DNS домена, к которому вы подключаетесь.
# MySQL
Из раздела Управление
Удалённый доступ можно перейти в веб-интерфейс phpMyAdmin для работы с базами данных MySQL.
Чтобы обновить пароль, можно воспользоваться функцией Сброс пароля базы данных.
Загрузить SQL-дамп можно с помощью функции Загрузка SQL-дампа. В появившемся окне унужно указать путь к файлу.
Также можно разрешить подключаться к MySQL не с локального хоста. Для этого активируйте переключатель MySQL-доступ. Имя сервера, логин и пароль для подключения создаются автоматически. Их нельзя изменить, можно только перегенерировать пароль.

# Git-репозиторий
В разделе Управление
Git-репозиторий можно инициализировать репозиторий, чтобы управлять сайтом с помощью системы контроля версий Git. В появившемся окне введите ваше имя и e-mail. Вы создадите локальный Git-репозиторий. Подробное руководство читайте на этой странице
# Вопросы и ответы
Есть ли ограничения по объёму диска?
У нас нет ограничений по объёму диска, но мы следим за работой сайтов. Если мы замечаем, что место заканчивается, то можем попросить вас удалить ненужные файлы. Такое бывает, если диск заполнен логами или используется недобросвестно.
Вы можете использовать дополнительные плагины для поддержки мультисайтовости, чтобы разместить несколько разных сайтов в пределах одной установки.
© Джино, 2003–2022. «Джино» является зарегистрированным товарным знаком.
Лицензия на телематические услуги связи №150549 от 09.03.2017.
Удаление (CRUD) — Python: Разработка на фреймворке Django
Удаление – самое простое действие в обычном CRUD. Ему не нужен шаблон. Удаление состоит из простого обработчика, в котором нет условных конструкций. В этом уроке научимся правильно удалять сущности.
Для удаления сущности, нужно добавить новые маршрут и обработчик:
Маршрут
from django.urls import path from hexlet_django_blog.article.views import IndexView, ArticleFormView, ArticleFormEditView, ArticleFormDeleteView urlpatterns = [ # . path('/delete/', ArticleFormDeleteView.as_view(), name='articles_delete'), ]
Обработчик
class ArticleFormDeleteView(View): def post(self, request, *args, **kwargs): article_id = kwargs.get('id') article = Article.objects.get(id=article_id) if article: article.delete() return redirect('articles')
Самое интересное в удалении – это ссылка или кнопка удаления. Она не может быть обычной ссылкой. С точки зрения HTTP, удаление — это DELETE-запрос. Эту семантику важно соблюдать, так как на нее ориентируются разные инструменты и поисковики при анализе страниц.
Django, как и большинство python фреймворков, принимает данные через GET или POST запросы. Для обработки таких запросов как DELETE или PATCH используются маршруты, содержащие в себе название действия и привязанные к соответствующим обработчикам POST запросов.
Но если сделать удаление обычной ссылкой, то любой автоматический инструмент может попробовать перейти по ней, например, предзагрузка страниц в Chrome. Это будет крайне неприятный сюрприз.
Чтобы решить подобную проблему, сделаем ссылку на удаление формой:
action="" method="post"> type="submit" value="Удалить">
Зависимости
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
