0

私は Pinax を使用しており、モジュールaccountを使用してプロジェクトでログイン テストを実行しようとしていrequestsます。

これは私がしました

def test001_login(self):
    #cookies = {'csrftoken': 'a8356fd05b25fad7004994fd5da89596'}
    r = requests.post(self.loginurl, data={'username':self.username, 'password': self.password}, auth=(self.username, self.password),allow_redirects=True)

    print r.status_code
    print r.text
    print r.cookies

返された Cookie は空です!! メソッドでget、クッキーを取得します。この問題の原因は何ですか?

r.text結果:

    <p>Reason given for failure:</p>
    <pre>
    No CSRF or session cookie.
    </pre>

  <p>In general, this can occur when there is a genuine Cross Site Request Forgery, or when
  <a
  href='http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ref-contrib-csrf'>Django's
  CSRF mechanism</a> has not been used correctly.  For POST forms, you need to
  ensure:</p>

私は固執しようとしましcookiesたが、それでも 403 エラーが発生しました。

4

2 に答える 2

2

あなたの投稿はCSRFトークンをログインに渡していません。これは機能しますか:

r = requests.post(self.loginurl, data={'csrf_token': django.middleware.csrf.get_token(), 'username':self.username, 'password': self.password}, auth=(self.username, self.password),allow_redirects=True)
于 2012-03-13T21:59:29.927 に答える
0

CSRFは、さまざまなトークンを含む非表示フィールドをフォームに追加し、フォームが投稿されたときにそれをテストすることで機能します。投稿にトークンが含まれていないため、このエラーが発生します。これを回避するか、オフにするか、「適切な」単体テストを使用することができます。

CSRFドキュメントを参照してください

テスト駆動開発を行っている場合は、クライアントを検索する価値があるかもしれません

于 2012-03-14T05:02:32.913 に答える