Spaces:
Sleeping
Sleeping
| from flask import Flask, render_template, request, redirect, url_for, jsonify, session | |
| from supabase import create_client, Client | |
| from dotenv import load_dotenv | |
| import os | |
| load_dotenv() | |
| # Initialize Flask app | |
| app = Flask(__name__) | |
| app.secret_key = os.urandom(24) | |
| SUPABASE_URL = os.getenv('SUPABASE_URL') | |
| SUPABASE_KEY = os.getenv('SUPABASE_KEY') | |
| supabase: Client = create_client(SUPABASE_URL, SUPABASE_KEY) | |
| # Admin credentials (for simplicity, hardcoded; use env vars in production) | |
| ADMIN_USERNAME = os.getenv('ADMIN_USERNAME', 'default_admin') | |
| ADMIN_PASSWORD = os.getenv('ADMIN_PASSWORD', 'default_password') | |
| # Home Page Route | |
| def home(): | |
| return render_template('home.html') | |
| # Product List Page Route | |
| def products(): | |
| response = supabase.table('products').select('*').execute() | |
| products = response.data | |
| return render_template('product_list.html', products=products) | |
| # Product Detail Page Route | |
| def product_detail(product_id): | |
| response = supabase.table('products').select('*').eq('id', product_id).execute() | |
| if response.data: | |
| product = response.data[0] | |
| return render_template('product_detail.html', product=product) | |
| else: | |
| return "Product not found", 404 | |
| # Admin Login Page Route | |
| def admin_login(): | |
| if request.method == 'POST': | |
| username = request.form['username'] | |
| password = request.form['password'] | |
| if username == ADMIN_USERNAME and password == ADMIN_PASSWORD: | |
| session['admin_logged_in'] = True | |
| return redirect(url_for('admin_dashboard')) | |
| else: | |
| return "Invalid credentials", 401 | |
| return render_template('admin_login.html') | |
| # Admin Dashboard Route | |
| def admin_dashboard(): | |
| if not session.get('admin_logged_in'): | |
| return redirect(url_for('admin_login')) | |
| response = supabase.table('products').select('*').execute() | |
| products = response.data | |
| return render_template('admin_dashboard.html', products=products) | |
| # Add Product Route | |
| def add_product(): | |
| if not session.get('admin_logged_in'): | |
| return redirect(url_for('admin_login')) | |
| if request.method == 'POST': | |
| name = request.form['name'] | |
| price = request.form['price'] | |
| details = request.form['details'] | |
| image_link = request.form['image_link'] | |
| whatsapp_link = request.form['whatsapp_link'] | |
| supabase.table('products').insert({ | |
| 'name': name, | |
| 'price': price, | |
| 'details': details, | |
| 'image_link': image_link, | |
| 'whatsapp_link': whatsapp_link | |
| }).execute() | |
| return redirect(url_for('admin_dashboard')) | |
| return render_template('add_product.html') | |
| # Edit Product Route | |
| def edit_product(product_id): | |
| if not session.get('admin_logged_in'): | |
| return redirect(url_for('admin_login')) | |
| if request.method == 'POST': | |
| name = request.form['name'] | |
| price = request.form['price'] | |
| details = request.form['details'] | |
| image_link = request.form['image_link'] | |
| whatsapp_link = request.form['whatsapp_link'] | |
| supabase.table('products').update({ | |
| 'name': name, | |
| 'price': price, | |
| 'details': details, | |
| 'image_link': image_link, | |
| 'whatsapp_link': whatsapp_link | |
| }).eq('id', product_id).execute() | |
| return redirect(url_for('admin_dashboard')) | |
| response = supabase.table('products').select('*').eq('id', product_id).execute() | |
| if response.data: | |
| product = response.data[0] | |
| return render_template('edit_product.html', product=product) | |
| else: | |
| return "Product not found", 404 | |
| # Delete Product Route | |
| def delete_product(product_id): | |
| if not session.get('admin_logged_in'): | |
| return redirect(url_for('admin_login')) | |
| supabase.table('products').delete().eq('id', product_id).execute() | |
| return redirect(url_for('admin_dashboard')) | |
| # Admin Logout Route | |
| def admin_logout(): | |
| session.pop('admin_logged_in', None) | |
| return redirect(url_for('admin_login')) | |
| # Main function | |
| if __name__ == '__main__': | |
| app.run(debug=True) | |