4.2 KiB
4.2 KiB
Product App - Modular Flask Application
🏗️ Structure
product_app/
├── app.py # Main application file
├── passenger_wsgi.py # Passenger WSGI entry point for production
├── requirements.txt # Python dependencies
├── blueprints/ # Modular routes organized by feature
│ ├── __init__.py
│ ├── auth.py # Login/logout/session management
│ └── users.py # User CRUD operations
├── templates/ # HTML templates
│ ├── login.html
│ └── user_manager.html
└── data/ # Data storage
└── users.json # User accounts with hashed passwords
🎯 Features Implemented
✅ Authentication System (blueprints/auth.py)
- Login with username/password
- Session management
- Password hashing (PBKDF2-SHA256, 1M iterations)
- Login required decorator
- Permission checking:
can_user('manage_users') - User status checking (active/inactive)
✅ User Management (blueprints/users.py)
- View all users
- Add new users
- Delete users
- Toggle active/inactive status
- Change passwords (requires admin verification)
- Location-based access control
- Permission system (manage_users, create_quotes, etc.)
- Download users as JSON
🔐 Default Login
- Username:
Master - Password:
Master - Permissions: Full access (manage_users)
🚀 Local Testing
cd product_app
python app.py
Visit: http://localhost:8080/
Routes
Main Routes
/- Home (redirects to login if not authenticated)/test- Test page to verify app is running
Authentication Routes (auth_bp)
/login- Login page/logout- Logout/api/login- POST: Login API/api/session- GET: Current session info
User Management Routes (users_bp)
/users/- User management page/users/api- GET: List all users, POST: Add user/users/api/<index>- DELETE: Delete user/users/api/<index>/active- PATCH: Toggle active status/users/api/<index>/change-password- POST: Change password/users/api/download- GET: Download users.json
📦 Production Deployment
Upload to Server: /home/bmdwtjuw/product-finder/
Files to upload:
app.pypassenger_wsgi.py(or just use existing)blueprints/(entire folder)__init__.pyauth.pyusers.py
templates/(entire folder)login.htmluser_manager.html
data/users.json
Control Panel Settings
- Application startup file:
passenger_wsgi.py(orapp.py) - Application Entry point:
application - Python version: 3.13.11
Test After Deployment:
- https://columbiawindows.com/product-finder/test
- https://columbiawindows.com/product-finder/login
- Login with Master/Master
- Test user management
🔧 Adding New Features
Create a New Blueprint
- Create
blueprints/your_feature.py:
from flask import Blueprint, render_template
from blueprints.auth import login_required, can_user
your_feature_bp = Blueprint('your_feature', __name__, url_prefix='/your-feature')
@your_feature_bp.route('/')
@login_required
def index():
return render_template('your_feature.html')
- Register in
app.py:
from blueprints.your_feature import your_feature_bp
app.register_blueprint(your_feature_bp)
-
Create
templates/your_feature.html -
Test locally, then upload to server
📝 Benefits of Blueprint Structure
✅ Separation of Concerns: Each feature in its own file
✅ Easy to Maintain: Find and edit specific features quickly
✅ Scalable: Add new features without touching existing code
✅ Testable: Each blueprint can be tested independently
✅ Reusable: Share decorators (login_required, permission_required) across blueprints
🛠️ Next Steps
- Add more blueprints for other features (quotes, products, etc.)
- Add more templates as needed
- Extend permission system
- Add location selection page
- Add the main product finder quiz