3

ここで愚かな質問かもしれません: Is Requests(A python HTTP lib) support Django 1.4 ?

以下のように、公式のクイックスタートに従ってリクエストを使用します。

requests.get('http://127.0.0.1:8000/getAllTracks', auth=('myUser', 'myPass'))

しかし、私は認証を正しく取得できません。(もちろん、URL、ユーザー名、パスワードを何度も確認しました。)

上記の URL ' http://127.0.0.1:8000/getAllTracks ' は、Django プロジェクトの url.py の URL パターンと一致し、その URL パターンのコールバックはDjango アプリの' getAllTracks ' ビューです。

「 getAllTracks 」ビューの認証コードをコメントアウトすると、上記のコードは正常に機能しますが、ビューにそれらの認証コードを追加すると、上記のコードは正しく認証されません。

ビューの認証コードは、実際には以下のように非常に単純です (2 行目)。

def getAllTracks(request):
    if request.user.is_authenticated():
        tracks = Tracks.objects.all()
        if tracks:
            # Do sth. here

つまり、上記の 2 行目を削除すると (もちろん、いくつかのインデントを調整して)、requests.get()操作は正しいことを行いますが、そうでない場合 (2 行目を保持する)、決して正しくなりません。

どんな助けでも大歓迎です。

4

3 に答える 3

3

authRequests のキーワードは、Django で使用されていないHTTP 基本認証を有効にすると思います。POST データで提供されたユーザー名とパスワードを使用してプロジェクトのログイン URL への POST 要求を行う必要があります。その後、Requests インスタンスは保存された認証データを含むセッション Cookie を受け取り、認証保護されたビューへの要求を成功させることができます。

于 2012-04-13T03:27:53.327 に答える
1

最初の認証で Cookie を設定し、それをクライアントに返し、その後のリクエストでは、クライアントがそのトークンをヘッダーで送り返すことを期待する方が簡単かもしれません。

r = requests.post('http://127.0.0.1:8000', auth=(UN, PW))
self.token = r.cookies['token']
self.headers = {'token': token}

その後、同じクラスにいると仮定して、次の呼び出しを行うことができます。

r = requests.post('http://127.0.0.1:8000/getAllTracks', headers=self.headers)
于 2013-04-15T15:44:55.587 に答える