Big Savings on Millions of Products
Shop the latest electronics, fashion, home appliances and much more
UPTO 70% OFF
Popular Products
Latest Smartphone with 128GB Storage
₹12,999
₹19,999
35% OFF
Free delivery
Lightweight Laptop 15.6 inch
₹45,999
₹59,999
23% OFF
Free delivery
Smart Watch with Fitness Tracker
₹2,499
₹3,999
38% OFF
Free delivery
Wireless Bluetooth Headphones
₹1,299
₹1,999
35% OFF
Free delivery
10-inch Tablet with 64GB Storage
₹18,999
₹24,999
24% OFF
Free delivery
Digital Camera with 20MP Lens
₹34,999
₹44,999
22% OFF
Free delivery
Bluetooth Portable Speaker
₹1,899
₹2,999
37% OFF
Free delivery
Jggd
from flask import Flask, render_template, request, redirect, url_for, flash, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
from werkzeug.security import generate_password_hash, check_password_hash
from datetime import datetime
import os
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key-here'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///flipkart.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login'
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password_hash = db.Column(db.String(120), nullable=False)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
def set_password(self, password):
self.password_hash = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.password_hash, password)
class Product(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(200), nullable=False)
description = db.Column(db.Text, nullable=True)
price = db.Column(db.Float, nullable=False)
category = db.Column(db.String(100), nullable=False)
image_url = db.Column(db.String(500), nullable=True)
stock = db.Column(db.Integer, default=0)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
seller_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
def to_dict(self):
return {
'id': self.id,
'name': self.name,
'description': self.description,
'price': self.price,
'category': self.category,
'image_url': self.image_url,
'stock': self.stock,
'created_at': self.created_at.isoformat() if self.created_at else None
}
class Cart(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
product_id = db.Column(db.Integer, db.ForeignKey('product.id'), nullable=False)
quantity = db.Column(db.Integer, default=1)
added_at = db.Column(db.DateTime, default=datetime.utcnow)
class Order(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
total_amount = db.Column(db.Float, nullable=False)
status = db.Column(db.String(50), default='pending')
created_at = db.Column(db.DateTime, default=datetime.utcnow)
shipping_address = db.Column(db.Text, nullable=False)
class OrderItem(db.Model):
id = db.Column(db.Integer, primary_key=True)
order_id = db.Column(db.Integer, db.ForeignKey('order.id'), nullable=False)
product_id = db.Column(db.Integer, db.ForeignKey('product.id'), nullable=False)
quantity = db.Column(db.Integer, nullable=False)
price = db.Column(db.Float, nullable=False)
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
@app.route('/')
def index():
products = Product.query.filter_by(stock > 0).limit(20).all()
return render_template('index.html', products=products)
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
username = request.form['username']
email = request.form['email']
password = request.form['password']
if User.query.filter_by(username=username).first() or User.query.filter_by(email=email).first():
flash('Username or email already exists')
return redirect(url_for('register'))
user = User(username=username, email=email)
user.set_password(password)
db.session.add(user)
db.session.commit()
flash('Registration successful')
return redirect(url_for('login'))
return render_template('register.html')
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
remember = request.form.get('remember')
user = User.query.filter_by(username=username).first()
if user and user.check_password(password):
login_user(user, remember=remember)
flash('Login successful')
next_page = request.args.get('next')
return redirect(next_page) if next_page else redirect(url_for('index'))
else:
flash('Invalid username or password')
return render_template('login.html')
@app.route('/logout')
@login_required
def logout():
logout_user()
flash('You have been logged out')
return redirect(url_for('index'))
@app.route('/products')
def products():
page = request.args.get('page', 1, type=int)
per_page = 12
products = Product.query.paginate(page=page, per_page=per_page, error_out=False)
return render_template('products.html', products=products)
@app.route('/product/')
def product_detail(product_id):
product = Product.query.get_or_404(product_id)
return render_template('product_detail.html', product=product)
@app.route('/cart')
@login_required
def cart():
cart_items = Cart.query.filter_by(user_id=current_user.id).all()
return render_template('cart.html', cart_items=cart_items)
@app.route('/cart/add/', methods=['POST'])
@login_required
def add_to_cart(product_id):
product = Product.query.get_or_404(product_id)
if product.stock <= 0:
flash('Product is out of stock')
return redirect(url_for('product_detail', product_id=product_id))
cart_item = Cart.query.filter_by(user_id=current_user.id, product_id=product_id).first()
if cart_item:
cart_item.quantity += 1
else:
cart_item = Cart(user_id=current_user.id, product_id=product_id, quantity=1)
db.session.add(cart_item)
db.session.commit()
flash('Product added to cart')
return redirect(url_for('cart'))
@app.route('/cart/remove/')
@login_required
def remove_from_cart(cart_item_id):
cart_item = Cart.query.filter_by(id=cart_item_id, user_id=current_user.id).first_or_404()
db.session.delete(cart_item)
db.session.commit()
flash('Product removed from cart')
return redirect(url_for('cart'))
@app.route('/cart/update/', methods=['POST'])
@login_required
def update_cart_quantity(cart_item_id):
quantity = int(request.form['quantity'])
cart_item = Cart.query.filter_by(id=cart_item_id, user_id=current_user.id).first_or_404()
product = Product.query.get(cart_item.product_id)
if quantity > product.stock:
flash('Requested quantity is not available')
return redirect(url_for('cart'))
cart_item.quantity = quantity
db.session.commit()
flash('Cart updated')
return redirect(url_for('cart'))
@app.route('/checkout')
@login_required
def checkout():
cart_items = Cart.query.filter_by(user_id=current_user.id).all()
total_amount = sum(item.product.price * item.quantity for item in cart_items)
return render_template('checkout.html', cart_items=cart_items, total_amount=total_amount)
@app.route('/order', methods=['POST'])
@login_required
def create_order():
shipping_address = request.form['shipping_address']
cart_items = Cart.query.filter_by(user_id=current_user.id).all()
if not cart_items:
flash('Cart is empty')
return redirect(url_for('cart'))
total_amount = sum(item.product.price * item.quantity for item in cart_items)
order = Order(
user_id=current_user.id,
total_amount=total_amount,
shipping_address=shipping_address
)
db.session.add(order)
db.session.commit()
for item in cart_items:
order_item = OrderItem(
order_id=order.id,
product_id=item.product_id,
quantity=item.quantity,
price=item.product.price
)
db.session.add(order_item)
Cart.query.filter_by(user_id=current_user.id).delete()
for item in cart_items:
product = Product.query.get(item.product_id)
product.stock -= item.quantity
db.session.commit()
flash('Order placed successfully')
return redirect(url_for('order_success'))
@app.route('/order-success')
@login_required
def order_success():
return render_template('order_success.html')
# કેટેગરી પેજ
@app.route('/category/')
def category_products(category):
page = request.args.get('page', 1, type=int)
per_page = 12
products = Product.query.filter_by(category=category).paginate(page=page, per_page=per_page, error_out=False)
return render_template('products.html', products=products, category=category)
@app.errorhandler(404)
def not_found_error(error):
return render_template('404.html'), 404
@app.errorhandler(500)
def internal_error(error):
db.session.rollback()
return render_template('500.html'), 500
if __name__ == '__main__':
with app.app_context():
db.create_all()
app.run(debug=True)