2012-04-24 223 views
0

先入観のない初心者は、前もってお詫びしています。私は何をしているのか分かりませんが、本当に周りを見回しました。Google App Engineのクッキーストレージ

ログインフォームの後ろに数十ページをダウンロードし、GAEで実行して結果をDB化しています。私は各ページの読み込みとデータベースの書き込みをタスクキューにエンキューしたいと思います。私がタスクキューに切り替えたとき、私はセッションを回っているときに問題があることに気付きました。誰もが使用するために1つのセッションインスタンス変数を作成し、

以前
cj = cookielib.CookieJar() 
    session = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
    session.addheaders.append(('User-agent', 'Mozilla/4.0')) 
    login_data = urllib.urlencode({ 'username' : 'guest', 
            'password' : 'guest', 
            'Submit1' : 'Submit'}) 
    resp = session.open(self.login_page, login_data, timeout=20) 
    self.session = session 

は、私が唯一のもののヘッドエンドで一度、このクラスをインスタンス化し、その後にまわりで私のインスタンスを渡す:

私はurllib2の使用オープナーを作成します文脈を保つ。タスクキューを使用するとオブジェクトを渡すことができないので、リクエストハンドラが呼び出されたときにオープナやクッキーへの参照を与えることができません。

オープナーやクッキー情報を保存したり渡したりする方法はありますか?毎回ログインしなくても新しいオープナーを作成できるのですか?各ハンドラにヘッダー辞書を介してCookie情報を渡すことはできますか? memcacheに何か入っていますか?クッキーを有効なオープナーに戻すには、正確に何を渡す必要がありますか?

上記を徹底的に守ってくださった方々に感謝します。

答えて

1

オブジェクトは、タスクキューの代わりにdeferred library経由で渡すことができます。

信頼性の理由から、私はあなたのオブジェクトをデータストアに保存し、タスクキュー内の参照のみを渡すことをお勧めします。

+0

それは私のことを念頭に置いていましたが、私は自分がデータベースからクラスインスタンスのようなものを再構成できるかどうかはわかりませんでした。それはとても涼しいです。私はそれをデータベースに置き、参照を渡してみます。 – user1354036

+0

@ user1354036ちょうどあなたの頭にすべての力を行かせてはいけません。 ;)これは(少なくとも間違いなく)好きなものや、ユーザーデータのようなものがあります。個人的には、クッキーをデータストアに保存するのが良い理由はないと思います。リファレンスはクッキー自体よりもはるかに小さいわけではありません。 –