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

Метод post

Метод post класса Client имитирует HTTP POST-запрос к вашему приложению в тестовой среде. Он принимает URL-адрес, данные для отправки и дополнительные параметры, а возвращает объект Response. Данные обычно передаются в виде словаря, который преобразуется в формат application/x-www-form-urlencoded или multipart/form-data в зависимости от настроек. Этот метод широко используется в тестах для проверки обработки форм, создания объектов через API, авторизации и других операций, требующих отправки данных.

Основные параметры метода:

  • path (обязательный) - URL-адрес, на который отправляется запрос, может быть относительным.
  • data (необязательный) - словарь или строка с данными для отправки. Может быть передан как dict, list кортежей или строка в формате JSON.
  • content_type (необязательный) - MIME-тип отправляемых данных. По умолчанию application/x-www-form-urlencoded.
  • follow (необязательный) - указывает, следует ли автоматически переходить по редиректам. По умолчанию False.
  • secure (необязательный) - указывает, следует ли отправлять запрос через HTTPS. По умолчанию False.
  • headers (необязательный) - словарь с дополнительными HTTP-заголовками.
  • QUERY_STRING (необязательный) - строка запроса, которая будет добавлена к URL.

Синтаксис

from django.test import Client client = Client() response = client.post(path, data=None, content_type=None, follow=False, secure=False, headers=None, **extra)

Пример

Давайте отправим POST-запрос для создания новой статьи через форму. Предположим, у нас есть модель Article и представление для создания записи:

from django.test import Client from myapp.models import Article client = Client() response = client.post('/articles/create/', { 'title': 'Test Article', 'content': 'This is a test content.', 'status': 'published' }) print(response.status_code) print(response.context['form'].is_valid())

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

"302" "True"

В ответе мы видим код 302, что означает успешный редирект после создания объекта. Проверим, действительно ли статья была создана в базе данных:

from myapp.models import Article article = Article.objects.get(title='Test Article') print(article.title) print(article.status)

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

"Test Article" "published"

Пример

Отправим POST-запрос с использованием параметра follow=True для автоматического перехода по редиректам:

from django.test import Client from myapp.models import Article client = Client() response = client.post('/articles/create/', { 'title': 'Another Article', 'content': 'More content here.', 'status': 'draft' }, follow=True) print(response.status_code) print(response.redirect_chain)

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

"200" "[('/articles/2/', 302)]"

Пример

Отправим POST-запрос с JSON-данными, изменив content_type на application/json. Это полезно для тестирования API-эндпоинтов, которые ожидают JSON-формат:

from django.test import Client import json client = Client() json_data = json.dumps({ 'username': 'testuser', 'password': 'testpass123' }) response = client.post('/api/login/', json_data, content_type='application/json') print(response.status_code) print(response.json())

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

"200" "{'message': 'Login successful', 'user_id': 1}"

Пример

Отправим POST-запрос с добавлением кастомного HTTP-заголовка и проверкой сессии. Например, для тестирования эндпоинта, требующего авторизации через токен:

from django.test import Client client = Client() headers = {'Authorization': 'Bearer testtoken123'} response = client.post('/api/protected/', { 'action': 'update_status', 'status': 'active' }, headers=headers) print(response.status_code) print(response.content)

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

"200" "b'{\"message\": \"Status updated successfully\"}'"

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

  • метод get,
    который имитирует GET-запрос к приложению в тестах
  • класс TestCase,
    который используется для написания тестов с поддержкой базы данных
  • метод login,
    который аутентифицирует пользователя для следующих запросов
  • метод force_login,
    который принудительно авторизует пользователя без проверки пароля
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить