Spaces:
Sleeping
Sleeping
File size: 4,455 Bytes
9249145 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
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
@app.route('/')
def home():
return render_template('home.html')
# Product List Page Route
@app.route('/products')
def products():
response = supabase.table('products').select('*').execute()
products = response.data
return render_template('product_list.html', products=products)
# Product Detail Page Route
@app.route('/products/<int:product_id>')
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
@app.route('/admin/login', methods=['GET', 'POST'])
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
@app.route('/admin')
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
@app.route('/admin/add', methods=['GET', 'POST'])
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
@app.route('/admin/edit/<int:product_id>', methods=['GET', 'POST'])
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
@app.route('/admin/delete/<int:product_id>', methods=['POST'])
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
@app.route('/admin/logout')
def admin_logout():
session.pop('admin_logged_in', None)
return redirect(url_for('admin_login'))
# Main function
if __name__ == '__main__':
app.run(debug=True)
|