Skip to content

Instantly share code, notes, and snippets.

@imbolc
Created January 4, 2016 12:02
Show Gist options
  • Save imbolc/ca43545ca31329b4f9e2 to your computer and use it in GitHub Desktop.
Save imbolc/ca43545ca31329b4f9e2 to your computer and use it in GitHub Desktop.
aiohttp flash messages
from aiohttp_session import get_session
def flash(request, message):
request.setdefault('flash_outgoing', []).append(message)
async def context_processor(request):
return {
'get_flashed_messages': lambda: request.pop('flash_incoming')
}
async def 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
@IlyaSemenov
Copy link

IlyaSemenov commented Jun 21, 2016

Note that this unnecessarily updates the session on each HTTP request even if the flash hasn't been used. This leads to a lot of redundant database update or Set-Cookie headers.

Also, the flashed messages are lost if the handler raises web.HTTPFound.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment