1

twitter.Twitterオブジェクトを作成しましたが、セッションに保存できません。以下は私のコードです。

t = twitter.Twitter(auth=twitter.OAuth(consumer_key, consumer_secret, 
    oauth_token, oauth_secret))    
request.session['t'] = t

しかし、私が次のような文字列を保存すると

request.session['t'] = 't'

それはうまくいく、なぜ?twitter#Twitterオブジェクトはシリアル化可能なオブジェクトではないので?twitter#Twitterオブジェクトが必要になるたびに認証を回避するにはどうすればよいですか?以下はdjangoのトレースです。

Django Version: 1.3.1
Python Version: 2.6.6
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'myproj.myapp']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "/usr/lib/python2.6/site-packages/django/core/handlers/base.py" in get_response
  178.                 response = middleware_method(request, response)
File "/usr/lib/python2.6/site-packages/django/contrib/sessions/middleware.py" in process_response
  36.                 request.session.save()
File "/usr/lib/python2.6/site-packages/django/contrib/sessions/backends/file.py" in save
  121.                     os.write(output_file_fd, self.encode(session_data))
File "/usr/lib/python2.6/site-packages/django/contrib/sessions/backends/base.py" in encode
  93.         pickled = pickle.dumps(session_dict, pickle.HIGHEST_PROTOCOL)
File "/usr/lib/python2.6/site-packages/twitter-1.9.0-py2.6.egg/twitter/api.py" in __call__
  173.         return self._handle_response(req, uri, arg_data)
File "/usr/lib/python2.6/site-packages/twitter-1.9.0-py2.6.egg/twitter/api.py" in _handle_response
  198.                 raise TwitterHTTPError(e, uri, self.format, arg_data)

Exception Type: TwitterHTTPError at /tool/log_in/
Exception Value: 
4

1 に答える 1

0

ご想像のとおり、ピクルス可能なオブジェクトのみを保存できます。

ドキュメントから

セッションディクショナリは、ピクルス可能なPythonオブジェクトを受け入れる必要があります。詳細については、pickleモジュールを参照してください。

于 2012-12-19T02:31:14.023 に答える