Common folder/file structure in Flask app
I have just created a flask application and so far I have a router for my "Hello world!" template.
I would like to add a little (a lot) more functionality, but I wonder how I should structure the app directory.
What's the most common way of structuring a Flask app?
For instance, should I create a routes.py
for all my routes?
Where does the SQLAlchemy stuff go?
Should models be in models.py
?
Solution 1:
You should check out the Larger Applications page in the Patterns section of the Flask docs: http://flask.pocoo.org/docs/patterns/packages/. It seems to be the model that most people follow when their application calls for a package instead of a module.
I believe views.py
is what you are calling routes.py
. After that, models would go in models.py
, forms would go in forms.py
, etc.
Solution 2:
An example of a FlaskApp directory:
/yourapp
/run.py
/config.py
/app
/__init__.py
/views.py
/models.py
/static/
/main.css
/templates/
/base.html
/requirements.txt
/yourappenv
run.py
- contains the actual python code that will import the app and start the development server.config.py
- stores configurations for your app.__init__.py
- initializes your application creating a Flask app instance.views.py
- this is where routes
are defined.models.py
- this is where you define models for your application.static
- contains static files i.e. CSS, Javascript, imagestemplates
- this is where you store your html
templates i.e. index.html
, layout.html
requirements.txt
- this is where you store your package dependancies, you can use pip
yourappenv
- your virtual environment for development