Handlers ======== Handlers handle the HTTP requests. Since brink (through aiohttp) uses Python's asyncio, we will use the ``async`` and ``await`` keywords extensively. Basic handler ------------- Handlers should return two values. First the status code and second the response body. :: async def handle_hello(request): return 200, {"data": "Hello world!"} Accessing URL parameters ------------------------ When you have a URL like ``/users/{id}`` you'd of course want to access that id in your handler. :: async def handle_get_user(request): id = request.match_info["id"] return 200, {"data": id} WebSocket handlers ------------------ Writing handlers for WebSocket connections in Brink is surprisinigly easy. Unlike regular handlers, WebSocket handlers will receive two arguments. The regular ``request`` object and a special WebSocketResponse object. :: async def handle_messasge_feed(request, ws): async for msg in Message.all().changes(): ws.send_json(msg) await ws.close() Handling request bodies ----------------------- Handling incoming request bodies can be a hazzle. You need to parse the data, validate it and map it to your data models. In Brink this is a breeze. :: from brink.handlers import handle_model from .models import Message @handle_model(Message) async def handle_create_message(request, msg): await msg.save() return 201, msg