Working with the Shell
Changelog
New in version 0.3.
There are however some handy helpers to make playing around in the shell amore pleasant experience. The main issue with interactive consolesessions is that you’re not triggering a request like a browser does whichmeans that , and others are notavailable. But the code you want to test might depend on them, so whatcan you do?
Generally it’s recommended that you read the The Request Contextchapter of the documentation first.
Starting with Flask 0.11 the recommended way to work with the shell is theflask shell
command which does a lot of this automatically for you.For instance the shell is automatically initialized with a loadedapplication context.
For more information see .
The easiest way to create a proper request context from the shell is byusing the test_request_context
method which createsus a :
Normally you would use the with
statement to make this request objectactive, but in the shell it’s easier to use thepush()
and methods by hand:
- >>> ctx.push()
By just creating a request context, you still don’t have run the code thatis normally run before a request. This might result in your databasebeing unavailable if you are connecting to the database in abefore-request callback or the current user not being stored on the object etc.
This however can easily be done yourself. Just call:
- >>> ctx.push()
- >>> app.preprocess_request()
Keep in mind that the preprocess_request()
functionmight return a response object, in that case just ignore it.
To shutdown a request, you need to trick a bit before the after requestfunctions (triggered by ) operate ona response object:
The functions registered as areautomatically called when the context is popped. So this is the perfectplace to automatically tear down resources that were needed by the requestcontext (such as database connections).
Just put them into a module (like shelltools) and import from there: