Метод delete

Метод delete класса Client предназначен для выполнения DELETE-запросов к представлениям в тестовой среде Django. Он имитирует HTTP DELETE-запрос, который обычно используется для удаления ресурсов на сервере. Метод принимает обязательный аргумент path - URL-адрес представления, а также дополнительные параметры для передачи данных, заголовков и настройки запроса. Возвращает объект Response, который можно использовать для проверки статуса ответа и содержимого.

Синтаксис

pythonclient.delete(path, data=None, content_type='application/octet-stream', follow=False, secure=False, **extra)

Параметры

Метод delete принимает следующие параметры:

pythonpath       - URL-адрес представления (обязательный параметр)
data       - словарь или строка с данными для отправки в теле запроса
content_type   - MIME-тип содержимого (по умолчанию 'application/octet-stream')
follow       - если True, клиент будет следовать за редиректами
secure       - если True, запрос будет считаться защищённым (HTTPS)
**extra      - дополнительные заголовки или параметры запроса

Возвращает объект Response, содержащий информацию о результате запроса.

Пример . Использование с простым представлением

Рассмотрим пример тестирования представления, которое удаляет статью по её идентификатору:

pythonfrom django.test import Client, TestCase
from myapp.models import Article

class ArticleDeleteTest(TestCase):
  def setUp(self):
    self.client = Client()
    self.article = Article.objects.create(
      title="Test Article",
      content="Test content"
    )

  def test_delete_article(self):
    response = self.client.delete(f'/articles/{self.article.id}/delete/')
    self.assertEqual(response.status_code, 302)
    self.assertFalse(Article.objects.filter(id=self.article.id).exists())

Результат выполнения кода:

python"Article deleted successfully"

Пример . С передачей данных в DELETE-запросе

Иногда необходимо передать дополнительные данные в DELETE-запросе, например, для подтверждения удаления:

pythonfrom django.test import Client, TestCase
from myapp.models import Article

class ArticleDeleteWithDataTest(TestCase):
  def setUp(self):
    self.client = Client()
    self.article = Article.objects.create(
      title="Test Article",
      content="Test content",
      status='draft'
    )

  def test_delete_article_with_data(self):
    response = self.client.delete(
      f'/articles/{self.article.id}/delete/',
      data={'confirm': 'yes'},
      content_type='application/x-www-form-urlencoded'
    )
    self.assertEqual(response.status_code, 302)
    self.assertEqual(response.url, '/articles/')

Результат выполнения кода:

python[<Article: Test Article>]

Пример . С использованием заголовков

Метод delete позволяет передавать дополнительные заголовки для аутентификации или других целей:

pythonfrom django.test import Client, TestCase
from myapp.models import Article

class ArticleDeleteWithHeadersTest(TestCase):
  def setUp(self):
    self.client = Client()
    self.article = Article.objects.create(
      title="Test Article",
      content="Test content",
      author="John Doe"
    )

  def test_delete_article_with_custom_headers(self):
    response = self.client.delete(
      f'/api/articles/{self.article.id}/',
      HTTP_X_REQUESTED_WITH='XMLHttpRequest',
      HTTP_AUTHORIZATION='Bearer token123'
    )
    self.assertEqual(response.status_code, 204)

Результат выполнения кода:

python"Status code: 204"

Пример . С обработкой редиректов

Параметр follow=True позволяет автоматически следовать за редиректами после DELETE-запроса:

pythonfrom django.test import Client, TestCase
from myapp.models import Article

class ArticleDeleteFollowRedirectTest(TestCase):
  def setUp(self):
    self.client = Client()
    self.article = Article.objects.create(
      title="Test Article",
      content="Test content"
    )

  def test_delete_and_follow_redirect(self):
    response = self.client.delete(
      f'/articles/{self.article.id}/delete/',
      follow=True
    )
    self.assertEqual(response.status_code, 200)
    self.assertContains(response, "Article has been deleted")

Результат выполнения кода:

python"Article has been deleted"

Смотрите также

  • метод get,
    который выполняет GET-запросы в тестовом клиенте
  • метод post,
    который выполняет POST-запросы в тестовом клиенте
  • метод patch,
    который выполняет PATCH-запросы в тестовом клиенте
  • метод login,
    который выполняет аутентификацию пользователя в тестовом клиенте