См.также
Фреймворк Pyramid имеет модуль pyramid.session
, который содержит в
себе несколько методов организации сессий.
Для того, чтобы использовать сессии, необходимо задать session factory во время конфигурации.
Очень простой, небезопасный способ создания сессии реализуется при помощи
функции pyramid.session.UnencryptedCookieSessionFactoryConfig()
. Он
использует куки для хранения информации сеанса. Эта реализация имеет следующие
ограничения:
Функция pyramid.session.SignedCookieSessionFactory()
шифрует
данные, поэтому их тяжело подделать.
Добавление сессий в конфиг происходит следующим образом:
from pyramid.session import SignedCookieSessionFactory
my_session_factory = SignedCookieSessionFactory('itsaseekreet')
from pyramid.config import Configurator
config = Configurator()
config.set_session_factory(my_session_factory)
или через атрибут конструктора:
from pyramid.session import SignedCookieSessionFactory
my_session_factory = SignedCookieSessionFactory('itsaseekreet')
from pyramid.config import Configurator
config = Configurator(session_factory=my_session_factory)
После добавления сессий в конфиг, вы можете получить доступ к объектам сессии из любого запроса. Например:
from pyramid.response import Response
def myview(request):
session = request.session
if 'counter' in session:
session['counter'] += 1
else:
session['counter'] = 1
return Response(session['counter'])
В самом простом случае достаточно включить модуль в проект:
config = Configurator()
config.include('pyramid_beaker')
Теперь можно использовать сессии:
from pyramid.response import Response
def myview(request):
session = request.session
if 'counter' in session:
session['counter'] += 1
else:
session['counter'] = 1
return Response(session['counter'])
«Всплывающие сообщения» — это очередь сообщений, хранящихся в сессии. Они показываются только один раз и при последующем обновлении удаляются или формируются новые.
Чтобы добавить сообщение, достаточно выполнить метод сессии flash()
.
request.session.flash('Congratulations "rm -rf /" successful')
Чтобы извлечь сообщение, нужно вызвать метод сессии pop_flash()
.
>>> request.session.flash('info message')
>>> request.session.pop_flash()
['info message']
>>> request.session.pop_flash()
[]
Для получения очереди, не извлекая сообщения из нее, нужно использовать метод peek_flash()
.
>>> request.session.flash('info message')
>>> request.session.peek_flash()
['info message']
>>> request.session.peek_flash()
['info message']
>>> request.session.pop_flash()
['info message']
>>> request.session.peek_flash()
[]
Например, всплывающие сообщения используются в модуле pyramid_sacrud. Это простой CRUD веб-интерфейс который выводит сообщения после какой-либо операции.
Пример всплывающего сообщения после добавления записи в админке pyramid_sacrud
Для получения токена используется метод session.get_csrf_token()
.
token = request.session.get_csrf_token()
Для создание нового токена:
token = request.session.new_csrf_token()
Пример добавления CSRF токена из текущей сессии в форму:
<form method="post" action="/myview">
<input type="hidden" name="csrf_token" value="{{ request.session.get_csrf_token() }}">
<input type="submit" value="Delete Everything">
</form>
Проверка токена:
from pyramid.session import check_csrf_token
def myview(request):
# Require CSRF Token
check_csrf_token(request)
# ...
или
@view_config(request_method='POST', check_csrf=True, ...)
def myview(request):
...