Я работаю над веб-приложением Django, которое (среди прочего )должно обрабатывать информацию о состоянии транзакции, отправленную с использованием запроса POST
.
В дополнение к безопасности HTTP, поддерживаемой платежным шлюзом, мой взгляд проверяет request.META['HTTP_REFERER']
на запись в settings.py
, чтобы попытаться предотвратить забавные дела :
if request.META.get('HTTP_REFERER', '') != settings.PAYMENT_URL and not settings.DEBUG:
return HttpResponseForbidden('Incorrect source URL for updating payment status')
. Теперь я хотел бы выяснить, как проверить это поведение.
Я могу достаточно легко сгенерировать отказ; HTTP_REFERER
это (предсказуемо)None
при нормальной загрузке страницы:
def test_transaction_status_succeeds(self):
response = self.client.post(reverse('transaction_status'), {... })
self.assertEqual(response.status_code, 403)
Как, однако, я могу подделать успешную отправку? Я пытался установить HTTP_REFERER
в extra
, , например.self.client.post(..., extra={'HTTP_REFERER': 'http://foo/bar'})
, но это не работает; представление, по-видимому, все еще видит пустой заголовок.
Поддерживает ли тестовый клиент пользовательские заголовки? Есть ли работа -, если нет? Я использую Django 1.1 и предпочел бы пока не обновляться, если это вообще возможно.