Context object
The context object utilizes ContextVar
to store the information.
This ContextVar
is a native Python object, introduced in Python 3.7.
For more information, see the official docs of contextvars.
Warning
If you see ContextDoesNotExistError
please see Errors.
The idea was to create something like a g
object in Flask
.
In Django
there’s no similar, builtin solution, though it can be compared to anything that allows you to store some
data in the thread such as django-currentuser or django-crum.
The interface hides the implementation, you can use the context
object as if it was a native dict
.
Most significant difference is that you can’t serialize the context object itself.
You’d have to use json.dumps(context.data)
, as .data
returns a dict
.
Following operations work as expected
**context
(dict
unpacking)
context["key"]
context.get("key")
context.items()
context["key"] = "value"
To make it available during the request-response cycle, it needs to be instantiated in the Starlette app with one of the middlewares,
or the request_cycle_context
context manager, which can be useful in FastAPI Depends or unit tests requiring an available context.
The middleware approach offer extended capability the form of plugins to process and extend the request, but needs to redefine the error response in case those plugins raise an Exception.
The context manager approach is more barebone, which likely will lead you to implement the initial context population yourself.