little-sprouts-kids-wear

byKEHINDE ABDULRAHEEM Lawal

from flask import Flask, render_template_string, request, redirect, url_for, flash from flask_sqlalchemy import SQLAlchemy from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user from flask_wtf import FlaskForm from wtforms import StringField, FloatField, TextAreaField, PasswordField, SubmitField from wtforms.validators import DataRequired app = Flask(__name__) app.config['SECRET_KEY'] = 'little-sprouts-secret-key-change-me' app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///sprouts.db' db = SQLAlchemy(app) login_manager = LoginManager(app) login_manager.login_view = 'login' YOUR_WHATSAPP = "2349073215335" # YOUR WHATSAPP - customers will order here # --- DATABASE --- class Product(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False) price = db.Column(db.Float, nullable=False) description = db.Column(db.Text, nullable=False) image_url = db.Column(db.String(300), default='https://via.placeholder.com/300x300/FFB6C1/FFFFFF?text=Little+Sprouts') class Admin(UserMixin, db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(50), unique=True, nullable=False) # This will be your phone number password = db.Column(db.String(100), nullable=False) # --- FORMS --- class ProductForm(FlaskForm): name = StringField('Product Name', validators=[DataRequired()]) price = FloatField('Price ₦', validators=[DataRequired()]) description = TextAreaField('Description', validators=[DataRequired()]) image_url = StringField('Image URL - Paste link to product photo') submit = SubmitField('Add Product') class LoginForm(FlaskForm): username = StringField('Phone Number', validators=[DataRequired()]) # Changed label password = PasswordField('Password', validators=[DataRequired()]) submit = SubmitField('Login') @login_manager.user_loader def load_user(user_id): return Admin.query.get(int(user_id)) # --- HTML TEMPLATES --- SHOP_HTML = """ <!DOCTYPE html><html><head><title>{{ store_name }}</title> <style> body{font-family:'Poppins',Arial; background:#FFF0F5; margin:0; text-align:center} .header{background:#FF69B4; color:white; padding:20px} .product{border:1px solid #FFB6C1; display:inline-block; margin:15px; padding:15px; width:260px; border-radius:15px; background:white; vertical-align:top} .product img{width:100%; border-radius:10px; height:260px; object-fit:cover} .btn{background:#FF69B4; color:white; padding:10px 15px; text-decoration:none; border-radius:8px; display:inline-block; margin-top:10px} .btn:hover{background:#FF1493} </style></head> <body> <div class="header"><h1>🌸 {{ store_name }} 🌸</h1><p>Cute clothes for your little ones</p></div> {% for p in products %} <div class="product"> <img src="{{p.image_url}}"> <h3>{{p.name}}</h3> <p><b>₦{{"{:,.2f}".format(p.price)}}</b></p> <p>{{p.description}}</p> <a href="{{url_for('order', product_id=p.id)}}" class="btn">Order on WhatsApp</a> </div> {% else %} <p>No products yet. Admin should add some!</p> {% endfor %} </body></html> """ ADMIN_HTML = """ <!DOCTYPE html><html><head><title>Admin - Little Sprouts</title> <style>body{font-family:Arial; padding:20px; background:#FFF0F5} input,textarea{width:350px; padding:10px; margin:5px; border-radius:5px; border:1px solid #ccc}</style> </head><body> <h1>Admin Panel - Little Sprouts</h1> <p>Logged in as: <b>{{current_user.username}}</b></p> <a href="{{url_for('logout')}}">Logout</a> | <a href="{{url_for('home')}}">View Shop</a> <h2>Add New Product</h2> <form method="POST">{{ form.hidden_tag() }} <p>{{form.name.label}}<br>{{form.name()}}</p> <p>{{form.price.label}}<br>{{form.price()}}</p> <p>{{form.description.label}}<br>{{form.description(rows=4)}}</p> <p>{{form.image_url.label}}<br>{{form.image_url()}}</p> <p>{{form.submit()}}</p> </form> <h2>Your Products</h2> {% for p in products %}<p><b>{{p.name}}</b> - ₦{{"{:,.2f}".format(p.price)}}</p>{% endfor %} {% for msg in get_flashed_messages() %}<p style="color:green">{{msg}}</p>{% endfor %} </body></html> """ LOGIN_HTML = """ <!DOCTYPE html><html><head><title>Admin Login</title> <style>body{font-family:Arial; text-align:center; padding-top:100px; background:#FFF0F5} input{padding:12px; margin:5px; width:250px; border-radius:5px; border:1px solid #ccc}</style> </head><body> <h1>Admin Login - Little Sprouts</h1> <p>Only Admin can access this page</p> <form method="POST">{{ form.hidden_tag() }} <p>{{form.username(placeholder="Enter Phone Number")}}</p> <p>{{form.password(placeholder="Enter Password")}}</p> <p>{{form.submit()}}</p> </form>{% for msg in get_flashed_messages() %}<p style="color:red">{{msg}}</p>{% endfor %} </body></html> """ ORDER_HTML = """ <!DOCTYPE html><html><head><title>Order {{product.name}}</title> <style>body{font-family:Arial; text-align:center; padding:50px; background:#FFF0F5} .btn{background:#25D366; color:white; padding:15px; text-decoration:none; border-radius:10px}</style> </head><body> <h1>Order: {{product.name}}</h1> <img src="{{product.image_url}}" width="250" style="border-radius:10px"><br> <h2>₦{{"{:,.2f}".format(product.price)}}</h2> <p>{{product.description}}</p> <a href="{{whatsapp_link}}" class="btn">Click to Order on WhatsApp</a> <br><br><a href="{{url_for('home')}}">← Back to Shop</a> </body></html> """ # --- ROUTES --- @app.route('/') def home(): products = Product.query.all() return render_template_string(SHOP_HTML, products=products, store_name="Little Sprouts Kids Wear") @app.route('/admin', methods=['GET', 'POST']) @login_required def admin(): form = ProductForm() products = Product.query.all() if form.validate_on_submit(): product = Product(name=form.name.data, price=form.price.data, description=form.description.data, image_url=form.image_url.data or None) db.session.add(product) db.session.commit() flash('Product Added Successfully!') return redirect(url_for('admin')) return render_template_string(ADMIN_HTML, form=form, products=products) @app.route('/order/<int:product_id>') def order(product_id): product = Product.query.get_or_404(product_id) whatsapp_msg = f"Hello Little Sprouts Kids Wear!%0A%0AI want to order:%0A*Product:* {product.name}%0A*Price:* ₦{product.price}%0A%0AMy Name and Address:" whatsapp_link = f"https://wa.me/{YOUR_WHATSAPP}?text={whatsapp_msg}" return render_template_string(ORDER_HTML, product=product, whatsapp_link=whatsapp_link) @app.route('/login', methods=['GET', 'POST']) def login(): form = LoginForm() if form.validate_on_submit(): admin = Admin.query.filter_by(username=form.username.data).first() if admin and admin.password == form.password.data: login_user(admin) return redirect(url_for('admin')) flash('Login Failed - Check phone number and password') return render_template_string(LOGIN_HTML, form=form) @app.route('/logout') @login_required def logout(): logout_user() return redirect(url_for('home')) if __name__ == '__main__': with app.app_context(): db.create_all() # CREATE YOUR ADMIN ACCOUNT ONCE if not Admin.query.first(): db.session.add(Admin(username='2349073215335', password='GraceLois.com')) db.session.commit() app.run(debug=True)

LoginHomeAdmin
Login

Comments (0)

No comments yet. Be the first!

Home design preview
Login: Enter credentials
Login: Submit login form
Admin: Add new product
Admin: View product list
Home: View shop as admin
Login design preview
Login: Enter credentials
Login: Submit login form
Admin: Add new product
Admin: View product list
Home: View shop as admin