РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
788 of 818 menu

Метод patch

Метод patch применяется к экземпляру класса Client и выполняет частичное обновление ресурса на сервере. Он принимает путь к представлению и данные для обновления в формате словаря или строки. Метод возвращает объект ответа, содержащий статус-код и содержимое ответа. В тестах он позволяет эмулировать PATCH-запросы для проверки частичного обновления данных.

Синтаксис

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

Параметры

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

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

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

Давайте отправим PATCH-запрос для частичного обновления статьи с идентификатором 1, изменив только заголовок:

from django.test import TestCase from django.contrib.auth.models import User from myapp.models import Article class ArticlePatchTest(TestCase): def test_partial_update_article(self): user = User.objects.create_user(username='john', password='secret') article = Article.objects.create( title='Old Title', content='Old Content', author=user, status='draft' ) self.client.login(username='john', password='secret') update_data = {'title': 'New Title'} response = self.client.patch( f'/api/articles/{article.id}/', data=update_data, content_type='application/json' ) article.refresh_from_db() print(f"Updated title: {article.title}") print(f"Old content: {article.content}")

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

"Updated title: New Title" "Old content: Old Content"

Пример . С проверкой статуса ответа

Проверим, что PATCH-запрос возвращает статус-код 200 при успешном обновлении и 404 при обращении к несуществующему ресурсу:

from django.test import TestCase from myapp.models import Article class ArticlePatchStatusTest(TestCase): def test_patch_success_status(self): article = Article.objects.create( title='Test Article', content='Test Content', status='draft' ) response = self.client.patch( f'/api/articles/{article.id}/', data={'status': 'published'}, content_type='application/json' ) print(f"Success status: {response.status_code}") def test_patch_not_found_status(self): response = self.client.patch( '/api/articles/999/', data={'title': 'New Title'}, content_type='application/json' ) print(f"Not found status: {response.status_code}")

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

"Success status: 200" "Not found status: 404"

Пример . С частичным обновлением нескольких полей

Отправим PATCH-запрос для обновления нескольких полей статьи, передав только те поля, которые нужно изменить:

from django.test import TestCase from django.contrib.auth.models import User from myapp.models import Article class ArticleMultiPatchTest(TestCase): def test_partial_update_multiple_fields(self): user = User.objects.create_user(username='admin', password='admin123') article = Article.objects.create( title='Original Title', content='Original Content', author=user, status='draft', views=10 ) self.client.login(username='admin', password='admin123') update_data = { 'title': 'Updated Title', 'views': 25 } response = self.client.patch( f'/api/articles/{article.id}/', data=update_data, content_type='application/json' ) article.refresh_from_db() print(f"New title: {article.title}") print(f"New views: {article.views}") print(f"Content unchanged: {article.content}")

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

"New title: Updated Title" "New views: 25" "Content unchanged: Original Content"

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

  • класс Client,
    который предоставляет методы для эмуляции запросов
  • метод get,
    который отправляет GET-запросы в тестах
  • метод post,
    который отправляет POST-запросы для создания данных
  • метод delete,
    который отправляет DELETE-запросы для удаления данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить