Что не так с моим кодом? WSGI, Beaker, Python, Apache2
Вопрос
Я использую Apache2, Python26, более или менее последней версии Beaker, mod_wsgi
Вот мой код, я получил это от http://beaker.grovie.org/sessions.html#using
from beaker.middleware import SessionMiddleware
def simple_app(environ, start_response):
# Get the session object from the environ
session = environ['beaker.session']
# Check to see if a value is in the session
if 'logged_in' in session:
user = True
else:
user = False
# Set some other session variable
session['user_id'] = 10
start_response('200 OK', [('Content-type', 'text/plain')])
return ['User is logged in: %s' % user]
# Configure the SessionMiddleware
session_opts = {
'session.type': 'file',
'session.cookie_expires': True,
}
wsgi_app = SessionMiddleware(simple_app, session_opts)
Это отлично работает, когда я захожу в Localhost/Beaker2.wsgi. Когда я пробую два изменения, сайт не удается:
1. Добавить
session.save()
или же
2. Изменить
'session.type': 'cookie',
Почему я получаю ошибки, когда я добавляю session.save () или изменять сеанс.
Полный трекбек: извините за свидания и все такое, сделал это с хвостом -f
Это для Session.save () ошибка:
[Sun May 01 04:35:55 2011] [error] [client 127.0.0.1] mod_wsgi (pid=25311): Exception occurred processing WSGI script '/home/yizi/apache2/www/beaker2.wsgi'.
[Sun May 01 04:35:55 2011] [error] [client 127.0.0.1] Traceback (most recent call last):
[Sun May 01 04:35:55 2011] [error] [client 127.0.0.1] File "/usr/local/lib/python2.6/dist-packages/Beaker-1.5.4-py2.6.egg/beaker/middleware.py", line 152, in __call__
[Sun May 01 04:35:55 2011] [error] [client 127.0.0.1] return self.wrap_app(environ, session_start_response)
[Sun May 01 04:35:55 2011] [error] [client 127.0.0.1] File "/home/yizi/apache2/www/beaker2.wsgi", line 21, in simple_app
[Sun May 01 04:35:55 2011] [error] [client 127.0.0.1] start_response('200 OK', [('Content-type', 'text/html')])
[Sun May 01 04:35:55 2011] [error] [client 127.0.0.1] File "/usr/local/lib/python2.6/dist-packages/Beaker-1.5.4-py2.6.egg/beaker/middleware.py", line 146, in session_start_response
[Sun May 01 04:35:55 2011] [error] [client 127.0.0.1] session.persist()
[Sun May 01 04:35:55 2011] [error] [client 127.0.0.1] File "/usr/local/lib/python2.6/dist-packages/Beaker-1.5.4-py2.6.egg/beaker/session.py", line 609, in persist
[Sun May 01 04:35:55 2011] [error] [client 127.0.0.1] self._session().save()
[Sun May 01 04:35:55 2011] [error] [client 127.0.0.1] File "/usr/local/lib/python2.6/dist-packages/Beaker-1.5.4-py2.6.egg/beaker/session.py", line 275, in save
[Sun May 01 04:35:55 2011] [error] [client 127.0.0.1] **self.namespace_args)
[Sun May 01 04:35:55 2011] [error] [client 127.0.0.1] File "/usr/local/lib/python2.6/dist-packages/Beaker-1.5.4-py2.6.egg/beaker/container.py", line 518, in __init__
[Sun May 01 04:35:55 2011] [error] [client 127.0.0.1] raise MissingCacheParameter("data_dir or file_dir is required")
[Sun May 01 04:35:55 2011] [error] [client 127.0.0.1] MissingCacheParameter: data_dir or file_dir is required
Это ошибка cookie:
[Sun May 01 04:53:18 2011] [error] [client 127.0.0.1] mod_wsgi (pid=25312): Exception occurred processing WSGI script '/home/yizi/apache2/www/beaker2.wsgi'.
[Sun May 01 04:53:18 2011] [error] [client 127.0.0.1] Traceback (most recent call last):
[Sun May 01 04:53:18 2011] [error] [client 127.0.0.1] File "/usr/local/lib/python2.6/dist-packages/Beaker-1.5.4-py2.6.egg/beaker/middleware.py", line 152, in __call__
[Sun May 01 04:53:18 2011] [error] [client 127.0.0.1] return self.wrap_app(environ, session_start_response)
[Sun May 01 04:53:18 2011] [error] [client 127.0.0.1] File "/home/yizi/apache2/www/beaker2.wsgi", line 10, in simple_app
[Sun May 01 04:53:18 2011] [error] [client 127.0.0.1] if 'logged_in' in session:
[Sun May 01 04:53:18 2011] [error] [client 127.0.0.1] File "/usr/local/lib/python2.6/dist-packages/Beaker-1.5.4-py2.6.egg/beaker/session.py", line 579, in __contains__
[Sun May 01 04:53:18 2011] [error] [client 127.0.0.1] return self._session().has_key(key)
[Sun May 01 04:53:18 2011] [error] [client 127.0.0.1] File "/usr/local/lib/python2.6/dist-packages/Beaker-1.5.4-py2.6.egg/beaker/session.py", line 547, in _session
[Sun May 01 04:53:18 2011] [error] [client 127.0.0.1] self.__dict__['_sess'] = CookieSession(req, **params)
[Sun May 01 04:53:18 2011] [error] [client 127.0.0.1] File "/usr/local/lib/python2.6/dist-packages/Beaker-1.5.4-py2.6.egg/beaker/session.py", line 373, in __init__
[Sun May 01 04:53:18 2011] [error] [client 127.0.0.1] raise BeakerException("No validate_key specified for Cookie only "
[Sun May 01 04:53:18 2011] [error] [client 127.0.0.1] BeakerException: No validate_key specified for Cookie only Session.
Решение
для session.save()
Ошибка говорит о том, что вы не сказали, где сохранить, установив data_dir
Параметр кэша сеанса
Для ошибки cookie ему нужен секретный ключ validate_key
Установите так, чтобы файлы cookie могли быть закодированы при отправке в браузер, декодировали и аутентифицировали, когда он получает файлы cookie из браузера
Поэтому, чтобы решить их, добавьте эти ключи с вашими собственными значениями:
Для файла:
session_opts['data_dir'] = "/some/place/to/save/"
Для печенья:
session_opts['validate_key'] = "some secret value"
session_opts['encrypt_key'] = "some other value"