16

私は、(とりわけ)POSTリクエストを使用して送信されたトランザクションステータス情報を処理する必要がある Django Web アプリケーションに取り組んでいます。

ペイメント ゲートウェイでサポートされている 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 を使用していますが、可能であればまだアップグレードしたくありません。

4

2 に答える 2

28

ほぼ正しい。それは実際には:

def transaction_status_suceeds(self):
    response = self.client.post(reverse('transaction_status'), {}, HTTP_REFERER='http://foo/bar')

;のソースを読み取るときに、(スキャッター演算子/キーワード引数アンパック演算子/その他)**見逃していました。関数自体への追加のキーワード引数の辞書になります。test/client.pyextra

于 2012-08-05T19:31:25.217 に答える