Skip to content

Commit 2fed537

Browse files
bmwantasvetlov
authored andcommitted
Add example of how to use session to flash messages between requests (#270)
1 parent 399d486 commit 2fed537

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

demo/flash_messages_example.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import base64
2+
from cryptography import fernet
3+
from aiohttp import web
4+
from aiohttp_session import setup, get_session
5+
from aiohttp_session.cookie_storage import EncryptedCookieStorage
6+
7+
8+
def flash(request, message):
9+
request.setdefault('flash_outgoing', []).append(message)
10+
11+
12+
def get_messages(request):
13+
return request.pop('flash_incoming')
14+
15+
16+
async def flash_middleware(app, handler):
17+
async def process(request):
18+
session = await get_session(request)
19+
request['flash_incoming'] = session.pop('flash', [])
20+
response = await handler(request)
21+
session['flash'] = (request.get('flash_incoming', []) +
22+
request.get('flash_outgoing', []))
23+
return response
24+
return process
25+
26+
27+
async def flash_handler(request):
28+
flash(request, 'You have just visited flash page')
29+
return web.HTTPFound('/')
30+
31+
32+
async def handler(request):
33+
text = 'No flash messages yet'
34+
messages = get_messages(request)
35+
if messages:
36+
text = 'Messages: {}'.format(','.join(messages))
37+
return web.Response(text=text)
38+
39+
40+
def make_app():
41+
app = web.Application()
42+
# secret_key must be 32 url-safe base64-encoded bytes
43+
fernet_key = fernet.Fernet.generate_key()
44+
secret_key = base64.urlsafe_b64decode(fernet_key)
45+
setup(app, EncryptedCookieStorage(secret_key))
46+
app.router.add_get('/', handler)
47+
app.router.add_get('/flash', flash_handler)
48+
# Install flash middleware
49+
app.middlewares.append(flash_middleware)
50+
return app
51+
52+
53+
web.run_app(make_app())
54+

0 commit comments

Comments
 (0)