• Flask Project Structure: Explained
    • main.py
    • __init__.py
    • /api folder
    • /models folder
    • /api/users.py
    • /api/calendar.py
    • /api/issues.py
    • /models/user.py
    • /models/event.py
    • /models/issue.py
    • scripts/db_init.py
    • templates/dashboard.html
    • static/styles.css
    • requirements.txt
Flask Project Structure Explained - Interactive Guide

Flask Project Structure: Explained

/flask-app │ ├── init.py ├── main.py │ ├── /api │ ├── users.py │ ├── calendar.py │ └── issues.py │ ├── /models │ ├── user.py │ ├── event.py │ └── issue.py │ ├── /scripts │ └── db_init.py │ ├── /templates │ └── dashboard.html │ ├── /static │ └── styles.css │ └── requirements.txt

main.py

Purpose: Entry point of your app. Runs the server using Flask.

from __init__ import create_app
app = create_app()

if __name__ == '__main__':
    app.run(debug=True)
  

__init__.py

Purpose: App configuration and Blueprint registration.

Sets up Flask and brings together all your routes.

from flask import Flask
from api.users import user_api
from api.calendar import calendar_api

def create_app():
    app = Flask(__name__)
    app.register_blueprint(user_api)
    app.register_blueprint(calendar_api)
    return app
  

/api folder

This folder contains the API route handler files such as users.py, calendar.py, and issues.py.

/models folder

This folder contains database model files like user.py, event.py, and issue.py.

/api/users.py

Handles user-related routes like /register and /login.

Defines HTTP endpoints and returns JSON responses for user actions.

/api/calendar.py

Handles calendar-related routes like /calendar/create.

Defines HTTP endpoints and returns JSON responses for calendar events.

/api/issues.py

Handles issue reporting routes like /issues/report.

Defines HTTP endpoints and returns JSON responses for issues.

/models/user.py

Defines the User database model using SQLAlchemy.

# models/user.py
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), unique=True)
  

/models/event.py

Defines the Event database model (example).

# models/event.py
class Event(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100))
    date = db.Column(db.DateTime)
  

/models/issue.py

Defines the Issue database model (example).

# models/issue.py
class Issue(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    description = db.Column(db.String(255))
  

scripts/db_init.py

Utility script to initialize the database.

# scripts/db_init.py
from __init__ import create_app
from models import db

app = create_app()
with app.app_context():
    db.create_all()
  

templates/dashboard.html

HTML template using Jinja2 for backend UI or dashboard.

<h1>User Dashboard</h1>
<ul>
  {% for user in users %}
    <li></li>
  {% endfor %}
</ul>
  

static/styles.css

CSS file for styling frontend views served by Flask.

requirements.txt

Dependency file listing Python packages required for the app.

Install all dependencies with:

pip install -r requirements.txt