Best Folder and Directory Structure for a Flask Project

A well organized folder and directory structure is essential for building scalable and maintainable Flask projects. Flask, being a micro web framework, provides developers with the flexibility to structure their projects based on their specific needs. In this blog, we will explore the best practices for setting up an ideal folder and directory structure for a Flask python project, along with real-world examples to guide you through the process.

Flask Folder/Directory Structuring

1. Project Root Directory

At the root level of your Flask project, you will find the main application file and other essential directories:

/my_flask_project/
|-- app.py
|-- requirements.txt
|-- static/
|-- templates/
|-- instance/ (optional)
|-- tests/ (optional)
  • app.py: The main application file that initializes and configures the Flask app.
  • requirements.txt: A list of project dependencies that can be installed using pip.
  • static/: This directory holds static files like CSS, JavaScript, and images used across the application.
  • templates/: Contains the HTML templates used to render views.
  • instance/ (optional): Directory to store instance-specific configuration files.
  • tests/ (optional): Directory for unit tests and test-related files.

2. The “app” Package:

Flask projects often follow a package-based structure, where the main application logic resides within the “app” package. Inside the “app” package, you can structure your project as follows:

/my_flask_project/
|-- app/
    |-- __init__.py
    |-- views.py
    |-- models.py
    |-- forms.py (optional)
    |-- static/
    |-- templates/
  • __init__.py: Initializes the Flask app and sets up configurations.
  • views.py: Contains the view functions for handling HTTP requests.
  • models.py: Defines the data models for the application.
  • forms.py (optional): Includes form classes if the app requires custom forms.
  • static/: Specific static files for this app.
  • templates/: HTML templates associated with this app.

3. Modularization:

For larger Flask projects, it is beneficial to break down functionality into smaller modules (blueprints) to keep the codebase organized. Here’s an example:

/my_flask_project/
|-- app/
    |-- __init__.py
    |-- module1/
    |   |-- __init__.py
    |   |-- views.py
    |   |-- models.py
    |-- module2/
    |   |-- __init__.py
    |   |-- views.py
    |   |-- models.py

4. The “static” Directory:

The global “static” directory holds project-wide static files:

/my_flask_project/
|-- static/
    |-- css/
    |-- js/
    |-- images/

5. The “templates” Directory:

The “templates” directory stores project-wide templates and base templates that are extended by module-specific templates:

/my_flask_project/
|-- templates/
    |-- base.html
    |-- header.html
    |-- footer.html
    |-- module1/
    |-- module2/

Setting up a well-structured folder and directory layout for your Flask project is crucial for its maintainability and scalability. By following the best practices and adopting the examples provided in this blog, you can ensure a clean and organized Flask project that will be easy to navigate and extend as your application grows. Happy Flask development!

You can also read our Blog on Flask Best Practice for Building Highquality web Apps.