मंगलवार, 3 फ़रवरी 2026

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)

कोई टिप्पणी नहीं:

एक टिप्पणी भेजें