Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flask App Template

A production-ready Flask application template with SQLite3, Bootstrap 5, user authentication, and admin dashboard.

Features

SQLite3 Database - Lightweight, file-based database with SQLAlchemy ORM ✅ Flask-Login - Secure user authentication and session management ✅ Bootstrap 5.3.2 - Modern, responsive UI components ✅ WTForms - Form handling with CSRF protection ✅ Admin Dashboard - Full-featured admin panel with user management ✅ Responsive Design - Mobile-first design that works on all devices ✅ Pre-configured Admin User - Quick setup with default admin (username: admin, password: q1)

Quick Start

1. Clone the Repository

git clone https://github.com/muntakson/FlaskAppTemplate.git
cd FlaskAppTemplate

2. Create Virtual Environment

python3 -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

3. Install Dependencies

pip install -r requirements.txt

4. Initialize Database

flask --app run.py init-db

5. Create Admin User

flask --app run.py create-admin

This creates an admin user with:

  • Username: admin
  • Password: q1

Or use the Python script:

python scripts/create_admin.py

6. Run the Application

python run.py

Visit: http://localhost:5000

Project Structure

FlaskAppTemplate/
├── app/
│   ├── __init__.py          # Application factory
│   ├── models.py            # Database models (User, Item)
│   ├── forms.py             # WTForms (Login, Register, UserForm)
│   ├── static/
│   │   ├── css/
│   │   │   └── custom.css   # Responsive custom styles
│   │   └── js/
│   │       └── custom.js    # Client-side interactions
│   └── templates/
│       ├── base.html        # Main site base template
│       ├── index.html       # Homepage
│       ├── login.html       # Login page
│       ├── register.html    # Registration page
│       └── admin/
│           ├── base.html    # Admin base template
│           ├── dashboard.html
│           ├── users.html   # User list with search/filter
│           └── user_form.html
├── instance/
│   └── app.db              # SQLite database (auto-created)
├── scripts/
│   └── create_admin.py     # Admin user creation script
├── run.py                  # Application entry point
├── requirements.txt        # Python dependencies
├── .env.example            # Environment variables template
└── README.md

Database Models

User Model

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    password_hash = db.Column(db.String(128), nullable=False)
    name = db.Column(db.String(100), nullable=False)
    email = db.Column(db.String(120), unique=True)
    is_admin = db.Column(db.Boolean, default=False)
    created_at = db.Column(db.DateTime, default=datetime.utcnow)

Example Item Model

class Item(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(200), nullable=False)
    description = db.Column(db.Text)
    created_at = db.Column(db.DateTime, default=datetime.utcnow)

Routes

Public Routes

  • GET / - Homepage
  • GET /login - Login page
  • POST /login - Login submission
  • GET /register - Registration page
  • POST /register - Registration submission
  • GET /logout - Logout (requires login)

Admin Routes (requires admin privileges)

  • GET /admin/ - Admin dashboard
  • GET /admin/users - User list
  • GET /admin/users/new - Create new user
  • POST /admin/users/new - Submit new user
  • GET /admin/users/edit/<id> - Edit user
  • POST /admin/users/edit/<id> - Update user
  • POST /admin/users/delete/<id> - Delete user

Admin Dashboard Features

  • Statistics Cards - Total users, admin count, system status
  • User Management - Full CRUD operations
  • Search & Filter - Client-side search and filtering
  • Responsive Tables - Mobile-friendly data tables
  • Role Management - Toggle admin privileges
  • Sidebar Navigation - Easy access to all admin functions

Customization

1. Change App Name

Edit app/__init__.py:

app = Flask(__name__)
# Update templates/base.html navbar-brand

2. Add Your Own Models

Edit app/models.py:

class YourModel(db.Model):
    __tablename__ = 'your_table'
    # Add your fields here

3. Add New Routes

Edit app/__init__.py:

@main_bp.route('/your-route')
def your_route():
    return render_template('your_template.html')

4. Customize Styles

Edit app/static/css/custom.css - includes:

  • Responsive breakpoints (mobile, tablet, desktop)
  • Card hover effects
  • Admin sidebar styling
  • Print styles
  • Accessibility features

Environment Variables

Create a .env file (see .env.example):

SECRET_KEY=your-secret-key-here
DATABASE_URL=sqlite:///app.db
FLASK_APP=run.py
FLASK_ENV=development

Production Deployment

Using Gunicorn

pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 'run:app'

NGINX Configuration

server {
    listen 80;
    server_name yourdomain.com;

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Environment Variables for Production

export SECRET_KEY=$(python -c 'import secrets; print(secrets.token_hex(32))')
export FLASK_ENV=production

Security Best Practices

CSRF Protection - All forms use Flask-WTF CSRF tokens ✅ Password Hashing - Werkzeug security with bcrypt ✅ SQL Injection Protection - SQLAlchemy ORM parameterized queries ✅ Admin Decorator - @admin_required protects sensitive routes ✅ Session Security - Flask-Login secure session management

Tech Stack

  • Backend: Python 3.8+, Flask 3.0.3
  • Database: SQLite3 with SQLAlchemy ORM
  • Authentication: Flask-Login
  • Forms: Flask-WTF + WTForms
  • Frontend: Bootstrap 5.3.2, Bootstrap Icons
  • JavaScript: Vanilla JS (no frameworks)

Flask CLI Commands

# Initialize database
flask --app run.py init-db

# Create admin user (username: admin, password: q1)
flask --app run.py create-admin

Browser Support

  • Chrome (latest)
  • Firefox (latest)
  • Safari (latest)
  • Edge (latest)
  • Mobile browsers (iOS Safari, Chrome Mobile)

Responsive Breakpoints

  • Mobile: < 576px (1 column layout)
  • Tablet: 576px - 991px (2-3 columns)
  • Desktop: ≥ 992px (4 columns)
  • Large Desktop: ≥ 1200px (max-width 1400px container)

License

MIT License - Feel free to use this template for your projects!

Credits

Created by muntakson

Based on patterns from production Flask applications with:

  • SQLite3 database
  • Bootstrap 5 UI
  • NGINX reverse proxy
  • User authentication
  • Admin dashboard

Contributing

Pull requests welcome! Please ensure:

  1. Code follows PEP 8 style guidelines
  2. All forms include CSRF protection
  3. Templates are responsive
  4. Admin routes use @admin_required decorator

Support

For issues or questions, please open an issue on GitHub: https://github.com/muntakson/FlaskAppTemplate/issues


Quick Start Summary:

git clone https://github.com/muntakson/FlaskAppTemplate.git
cd FlaskAppTemplate
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
flask --app run.py init-db
flask --app run.py create-admin
python run.py

Default admin credentials: admin / q1

Visit: http://localhost:5000

About

Production-ready Flask application template with SQLite3, Bootstrap 5, user authentication, and admin dashboard

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages