{"id":167,"date":"2025-10-28T02:25:53","date_gmt":"2025-10-28T02:25:53","guid":{"rendered":"https:\/\/codetypingpro.com\/?p=167"},"modified":"2025-12-17T07:45:30","modified_gmt":"2025-12-17T07:45:30","slug":"26-real-world-python-projects-simple-e-commerce-backend","status":"publish","type":"post","link":"https:\/\/codetypingpro.com\/?p=167","title":{"rendered":"26 &#8211; Real-World Python Projects &#8211; Simple E-commerce Backend"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">\ud83c\udfaf <strong>Project<\/strong> <strong>Objective<\/strong><\/h3>\n\n\n\n<p>To design a Python program that handles <strong>products, users, carts, and orders<\/strong> \u2014 the essential logic behind an e-commerce website (no front-end required).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde9 1. <strong>Overview<\/strong><\/h2>\n\n\n\n<p>You\u2019ll build a <strong>console-based backend<\/strong> that supports:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2705 User registration\/login<\/li>\n\n\n\n<li>\ud83d\udecd\ufe0f Product catalog management<\/li>\n\n\n\n<li>\ud83d\uded2 Cart and checkout system<\/li>\n\n\n\n<li>\ud83d\udcb3 Order tracking<\/li>\n<\/ul>\n\n\n\n<p>We\u2019ll simulate database operations using <strong>JSON files<\/strong>, but it can easily upgrade to <strong>SQLite or MySQL<\/strong> later.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2699\ufe0f 2. <strong>Setup<\/strong><\/h2>\n\n\n\n<p>We\u2019ll use:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Library<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td><code>json<\/code><\/td><td>Store and read database files<\/td><\/tr><tr><td><code>uuid<\/code><\/td><td>Generate unique IDs for products\/orders<\/td><\/tr><tr><td><code>datetime<\/code><\/td><td>Timestamp orders<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>No external installation needed \u2014 all built-in!<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddf1 3. <strong>File Structure<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>ecommerce_backend\/\n\u2502\n\u251c\u2500\u2500 main.py\n\u251c\u2500\u2500 users.json\n\u251c\u2500\u2500 products.json\n\u2514\u2500\u2500 orders.json\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udce6 4. <strong>Starter Code<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>main.py<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>import json, uuid, datetime, os\n\n# ---------- DATABASE HANDLERS ----------\ndef load_data(filename):\n    if not os.path.exists(filename):\n        return &#91;]\n    with open(filename, \"r\") as f:\n        return json.load(f)\n\ndef save_data(filename, data):\n    with open(filename, \"w\") as f:\n        json.dump(data, f, indent=4)\n\n# ---------- USER SYSTEM ----------\ndef register_user():\n    users = load_data(\"users.json\")\n    name = input(\"Enter your name: \")\n    email = input(\"Enter your email: \")\n    password = input(\"Enter password: \")\n\n    for u in users:\n        if u&#91;\"email\"] == email:\n            print(\"\u274c Email already registered.\")\n            return\n\n    user = {\n        \"id\": str(uuid.uuid4()),\n        \"name\": name,\n        \"email\": email,\n        \"password\": password\n    }\n    users.append(user)\n    save_data(\"users.json\", users)\n    print(\"\u2705 Registration successful!\")\n\ndef login_user():\n    users = load_data(\"users.json\")\n    email = input(\"Email: \")\n    password = input(\"Password: \")\n\n    for u in users:\n        if u&#91;\"email\"] == email and u&#91;\"password\"] == password:\n            print(f\"\u2705 Welcome {u&#91;'name']}!\")\n            return u\n    print(\"\u274c Invalid credentials.\")\n    return None\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udecd\ufe0f 5. <strong>Product Management<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>def add_product():\n    products = load_data(\"products.json\")\n    name = input(\"Product name: \")\n    price = float(input(\"Price: \"))\n    stock = int(input(\"Stock quantity: \"))\n\n    product = {\n        \"id\": str(uuid.uuid4()),\n        \"name\": name,\n        \"price\": price,\n        \"stock\": stock\n    }\n    products.append(product)\n    save_data(\"products.json\", products)\n    print(\"\u2705 Product added successfully!\")\n\ndef list_products():\n    products = load_data(\"products.json\")\n    if not products:\n        print(\"No products available.\")\n        return\n    print(\"\\n\ud83d\uded2 Product List:\")\n    for p in products:\n        print(f\"ID: {p&#91;'id']&#91;:6]} | {p&#91;'name']} - \u20b9{p&#91;'price']} (Stock: {p&#91;'stock']})\")\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\uded2 6. <strong>Cart &amp; Checkout<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>cart = &#91;]\n\ndef add_to_cart():\n    products = load_data(\"products.json\")\n    list_products()\n    pid = input(\"Enter product ID to add to cart: \")\n    for p in products:\n        if p&#91;\"id\"].startswith(pid):\n            qty = int(input(\"Enter quantity: \"))\n            if qty &lt;= p&#91;\"stock\"]:\n                cart.append({\"product\": p, \"qty\": qty})\n                print(f\"\u2705 Added {qty} x {p&#91;'name']} to cart\")\n                return\n            else:\n                print(\"\u274c Not enough stock.\")\n                return\n    print(\"\u274c Product not found.\")\n\ndef view_cart():\n    if not cart:\n        print(\"\ud83d\uded2 Cart is empty.\")\n        return\n    print(\"\\n\ud83e\uddfe Your Cart:\")\n    total = 0\n    for item in cart:\n        subtotal = item&#91;\"product\"]&#91;\"price\"] * item&#91;\"qty\"]\n        total += subtotal\n        print(f\"{item&#91;'product']&#91;'name']} \u00d7 {item&#91;'qty']} = \u20b9{subtotal}\")\n    print(f\"\\nTotal: \u20b9{total}\")\n\ndef checkout(user):\n    if not cart:\n        print(\"Cart empty.\")\n        return\n    products = load_data(\"products.json\")\n    orders = load_data(\"orders.json\")\n\n    total = sum(item&#91;\"product\"]&#91;\"price\"] * item&#91;\"qty\"] for item in cart)\n    order = {\n        \"id\": str(uuid.uuid4()),\n        \"user_id\": user&#91;\"id\"],\n        \"items\": &#91;{\"name\": i&#91;\"product\"]&#91;\"name\"], \"qty\": i&#91;\"qty\"]} for i in cart],\n        \"total\": total,\n        \"date\": datetime.datetime.now().strftime(\"%Y-%m-%d %H:%M\")\n    }\n\n    # Update stock\n    for item in cart:\n        for p in products:\n            if p&#91;\"id\"] == item&#91;\"product\"]&#91;\"id\"]:\n                p&#91;\"stock\"] -= item&#91;\"qty\"]\n\n    save_data(\"products.json\", products)\n    orders.append(order)\n    save_data(\"orders.json\", orders)\n    cart.clear()\n\n    print(f\"\u2705 Order placed! Total amount: \u20b9{total}\")\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udded 7. <strong>Main Menu<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>def main():\n    print(\"=== \ud83d\uded2 Simple E-commerce Backend ===\")\n    user = None\n\n    while True:\n        print(\"\\n1. Register\")\n        print(\"2. Login\")\n        print(\"3. Add Product (Admin)\")\n        print(\"4. List Products\")\n        print(\"5. Add to Cart\")\n        print(\"6. View Cart\")\n        print(\"7. Checkout\")\n        print(\"8. Exit\")\n\n        choice = input(\"Choose an option: \")\n\n        if choice == \"1\":\n            register_user()\n        elif choice == \"2\":\n            user = login_user()\n        elif choice == \"3\":\n            add_product()\n        elif choice == \"4\":\n            list_products()\n        elif choice == \"5\":\n            if user: add_to_cart()\n            else: print(\"\ud83d\udd12 Please log in first.\")\n        elif choice == \"6\":\n            view_cart()\n        elif choice == \"7\":\n            if user: checkout(user)\n            else: print(\"\ud83d\udd12 Please log in first.\")\n        elif choice == \"8\":\n            print(\"\ud83d\udc4b Exiting...\")\n            break\n        else:\n            print(\"\u274c Invalid choice.\")\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>if __name__ == \"__main__\":\n    main()\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde0 8. <strong>How It Works<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Component<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>users.json<\/code><\/td><td>Stores users and credentials<\/td><\/tr><tr><td><code>products.json<\/code><\/td><td>Holds product catalog<\/td><\/tr><tr><td><code>orders.json<\/code><\/td><td>Tracks completed orders<\/td><\/tr><tr><td><code>cart<\/code><\/td><td>Temporary session cart in memory<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udca1 9. <strong>Enhancement Ideas<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Feature<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>\ud83d\udcb3 Payment Simulation<\/td><td>Simulate payments via wallet or mock API<\/td><\/tr><tr><td>\ud83d\udce6 Shipping Status<\/td><td>Add delivery tracking &amp; updates<\/td><\/tr><tr><td>\ud83d\udc64 Admin Panel<\/td><td>Differentiate between customers &amp; admins<\/td><\/tr><tr><td>\ud83e\uddfe Invoice<\/td><td>Generate PDF invoice using <code>reportlab<\/code><\/td><\/tr><tr><td>\ud83d\uddc4\ufe0f Database<\/td><td>Use SQLite instead of JSON for real persistence<\/td><\/tr><tr><td>\ud83c\udf10 Flask API<\/td><td>Expose endpoints for a front-end app or mobile app<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 <strong>Summary<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Module<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td>\ud83e\uddcd User System<\/td><td>Register, Login<\/td><\/tr><tr><td>\ud83d\udecd\ufe0f Product Management<\/td><td>Add &amp; list products<\/td><\/tr><tr><td>\ud83d\uded2 Cart System<\/td><td>Add, view, checkout<\/td><\/tr><tr><td>\ud83d\udcbe Persistence<\/td><td>JSON-based data storage<\/td><\/tr><tr><td>\ud83d\udca1 Extendable<\/td><td>Can upgrade to full web backend<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83c\udfaf Project Objective To design a Python program that handles products, users, carts, and orders \u2014 the essential logic behind an e-commerce website (no front-end required). \ud83e\udde9 1. Overview You\u2019ll build a console-based backend that supports: We\u2019ll simulate database operations using JSON files, but it can easily upgrade to SQLite or MySQL later. \u2699\ufe0f 2. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-167","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/codetypingpro.com\/index.php?rest_route=\/wp\/v2\/posts\/167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/codetypingpro.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/codetypingpro.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/codetypingpro.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/codetypingpro.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=167"}],"version-history":[{"count":2,"href":"https:\/\/codetypingpro.com\/index.php?rest_route=\/wp\/v2\/posts\/167\/revisions"}],"predecessor-version":[{"id":305,"href":"https:\/\/codetypingpro.com\/index.php?rest_route=\/wp\/v2\/posts\/167\/revisions\/305"}],"wp:attachment":[{"href":"https:\/\/codetypingpro.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codetypingpro.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codetypingpro.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}