Skip to content

Flash messages example #270

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 2, 2018
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions demo/flash_messages_example.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import base64
from cryptography import fernet
from aiohttp import web
from aiohttp_session import setup, get_session
from aiohttp_session.cookie_storage import EncryptedCookieStorage


def flash(request, message):
request.setdefault('flash_outgoing', []).append(message)


def get_messages(request):
return request.pop('flash_incoming')


async def flash_middleware(app, handler):
async def process(request):
session = await get_session(request)
request['flash_incoming'] = session.pop('flash', [])
response = await handler(request)
session['flash'] = (request.get('flash_incoming', []) +
request.get('flash_outgoing', []))
return response
return process


async def flash_handler(request):
flash(request, 'You have just visited flash page')
return web.HTTPFound('/')


async def handler(request):
text = 'No flash messages yet'
messages = get_messages(request)
if messages:
text = 'Messages: {}'.format(','.join(messages))
return web.Response(text=text)


def make_app():
app = web.Application()
# secret_key must be 32 url-safe base64-encoded bytes
fernet_key = fernet.Fernet.generate_key()
secret_key = base64.urlsafe_b64decode(fernet_key)
setup(app, EncryptedCookieStorage(secret_key))
app.router.add_get('/', handler)
app.router.add_get('/flash', flash_handler)
# Install flash middleware
app.middlewares.append(flash_middleware)
return app


web.run_app(make_app())