使用python streamlit库快速创建一个购物网站

2023-12-05

streamlit

Streamlit 是一个基于 Python 的 Web 应用程序框架,致力于以更高效、更灵活的方式可视化数据,并分析结果。

Streamlit是一个开源库,可以帮助数据科学家和学者在短时间内开发机器学习 (ML) 可视化仪表板。只需几行代码,我们就可以构建并部署强大的数据应用程序。

功能设计

  • 商品展示
  • 商品选购
  • 加入购物车
  • 购物车结算
  • 增加新商品
  • 文件保存商品信息

函数/Page 设计

函数名 说明
load_products() 打开或创建存储商品信息的文件,并读取信息
save_products(products) 将商品信息保存在文件中
show_products() 用按钮显示所有商品信息
Select Product 读取商品名和数量,传给购物车
Shopping Cart 展示所有已选购商品,计算总价
Checkout 计算总价,点击买单后清空购物车
Add New Product 读取新商品信息,加入商品信息列表,写入文件,重新加载文件

源码

import streamlit as st
import json
import os

def load_products():
    if not os.path.exists('products.json'):
        with open('products.json', 'w') as file:
            file.write('{}')  # 创建一个空的 JSON 文件
    with open('products.json', 'r') as file:
        products = json.load(file)
    return products

def save_products(products):
    with open('products.json', 'w') as file:
        json.dump(products, file, indent=4)

# 初始化购物车
if 'shopping_cart' not in st.session_state:
    st.session_state.shopping_cart = []

# 初始化商品信息
if 'products' not in st.session_state:
    st.session_state.products = load_products()

def show_products():
    st.write("Current Products:")
    products = st.session_state.products
    product_names = list(products.keys())
    num_products = len(product_names)

    # 创建五列
    col1, col2, col3, col4, col5 = st.columns(5)

    # 在每列中显示产品信息
    for i in range(num_products):
        if i % 5 == 0:
            if col1.button(f"{product_names[i]} - ${products[product_names[i]]['price']} - {products[product_names[i]]['description']}"):
                st.session_state.shopping_cart.append((product_names[i], 1))
        elif i % 5 == 1:
            if col2.button(f"{product_names[i]} - ${products[product_names[i]]['price']} - {products[product_names[i]]['description']}"):
                st.session_state.shopping_cart.append((product_names[i], 1))
        elif i % 5 == 2:
            if col3.button(f"{product_names[i]} - ${products[product_names[i]]['price']} - {products[product_names[i]]['description']}"):
                st.session_state.shopping_cart.append((product_names[i], 1))
        elif i % 5 == 3:
            if col4.button(f"{product_names[i]} - ${products[product_names[i]]['price']} - {products[product_names[i]]['description']}"):
                st.session_state.shopping_cart.append((product_names[i], 1))
        else:
            if col5.button(f"{product_names[i]} - ${products[product_names[i]]['price']} - {products[product_names[i]]['description']}"):
                st.session_state.shopping_cart.append((product_names[i], 1))

def main():
    st.title('Welcome to the Convenience Store')
    page = st.sidebar.radio("Page", ["Select Product", "Shopping Cart", "Checkout", "Add New Product"])

    if page == "Select Product":
        show_products()
        selected_product = st.selectbox('Select a product', list(st.session_state.products.keys()), format_func=lambda x: f"{x} - ${st.session_state.products[x]['price']} - {st.session_state.products[x]['description']}")
        quantity = st.number_input('Quantity', min_value=1, max_value=10)
        if st.button('Add to cart'):
            st.session_state.shopping_cart.append((selected_product, quantity))
            st.success('Added to cart!')
            st.experimental_rerun()  # 刷新页面,更新商品信息

    elif page == "Shopping Cart":
        st.title('Shopping Cart')
        for item in st.session_state.shopping_cart:
            st.write(f"{item[0]} - Quantity: {item[1]}")
        total_cost = sum([st.session_state.products[item[0]]['price'] * item[1] for item in st.session_state.shopping_cart])
        st.write(f"Total Cost: ${total_cost}")

    elif page == "Checkout":
        st.title('Checkout')
        total_cost = sum([st.session_state.products[item[0]]['price'] * item[1] for item in st.session_state.shopping_cart])
        st.write(f"Total Cost: ${total_cost}")
        if st.button('Confirm Purchase'):
            st.success('Thank you for your purchase!')
            st.session_state.shopping_cart = []

    elif page == "Add New Product":
        st.title('Add New Product')
        new_product_name = st.text_input('Product name')
        new_product_price = st.number_input('Product price')
        new_product_description = st.text_input('Product description')
        if st.button('Add Product'):
            st.session_state.products[new_product_name] = {'price': new_product_price, 'description': new_product_description}
            save_products(st.session_state.products)  # 将新的商品信息保存到文件
            st.success('Product added successfully!')
            st.experimental_rerun()  # 刷新页面,显示新商品

if __name__ == "__main__":
    main()

运行示例

请添加图片描述
在这里插入图片描述
在这里插入图片描述 在这里插入图片描述

总结

streamlit使用非常方便简单,可以快速创建各种web应用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用python streamlit库快速创建一个购物网站 的相关文章

随机推荐

  • 138-基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真+源程序

    资料编号 138 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 LED灯 蜂鸣器 电位器 制作一个基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真 2 通过DHT1
  • 【经典蓝牙 SSP协议介绍】

    协议定义 SSP Secure Simple Pairing 安全简单配对 协议目的 1 为用户简化配对过程 2 维护或提高蓝牙无线技术的安全性 安全性指两点目标 1 被动窃听保护 2 中间人 MITM 攻击保护 协议流程 下面说下我认为的
  • 133-基于stm32单片机停车场车位管理系统Proteus仿真+源程序

    资料编号 133 一 功能介绍 1 采用stm32单片机 4位数码管 独立按键 制作一个基于stm32单片机停车场车位管理系统Proteus仿真 2 通过按键进行模拟车辆进出 并且通过程序计算出当前的剩余车位数量 3 将剩余的车位数量显示到
  • 【网络安全】网络安全的标准和规范

    网络安全的标准和规范是网络安全领域的重要组成部分 它们为网络安全提供了技术依据 规定了网络安全的技术要求和操作方式 帮助我们构建安全的网络环境 下面 我们将详细介绍一些主要的网络安全标准和规范 以及它们在实际操作中的应用 一 ISO IEC
  • Elasticsearch-Kibana使用教程

    1 索引操作 1 1创建索引 PUT employee settings index refresh interval 1s number of shards 1 max result window 10000 number of repl
  • el-table 删除某行数据时 删除语句包含行号/序号

    el table可展示每行数据的序号列 在点击删除按钮的时候 会获取到该行所有的数据值 但是要想删除时提示到具体的序号 如 是否确认删除序号为1的数据项 我是这样写的 删除按钮操作 handleDelete row index用来存储该项数
  • Android中的Banner轮播图的使用

    目录 效果图 介绍 3 XML中banner常用的属性 使用 导入依赖 xml文件 活动代码 本文在碎片中使用 效果图 Banner效果图 介绍 Banner轮播图是一种常见的移动应用界面设计元素 用于展示多张图片或广告 并支持自动切换 它
  • “我,大三,寒假靠Python兼职赚了7567.6元。”

    目前很多同学已经结束期末考试 进入寒假 有很多同学问我 有什么兼职可以线上做的吗 最好还能提高自己的一些技能 以前周末或假期经常去当服务员 导购 发传单之类 最后发现 只是在无畏地消磨自己的时间 对本身技能并不能得到任何提高 所以 不想再重
  • 【王道】计算机组成原理笔记 第四章 指令系统

    前三章讲的分别是概述 运算器和存储器 接下来的第四章和第五章内容都是关于控制器的 我们知道 控制器通过指令来控制计算机 所以这一章介绍指令 下一章介绍控制器如何通过指令来控制计算机 4 1 1 指令格式 1 指令 操作码和地址码 1 1 指
  • linux内核机制之设备树

    设备树 Device Tree 基本概念及作用 在内核源码中 存在大量对板级细节信息描述的代码 这些代码充斥在 arch arm plat xxx和 arch arm mach xxx目录 对内核而言这些platform设备 resourc
  • 视频压缩怎么操作?看完这篇你就知道了

    亲们 你们是否经常为了视频文件过大而烦恼呢 别担心 现在有了视频压缩软件 我们可以轻松解决这个问题 视频压缩软件不仅在日常生活中大放异彩 也在工作和娱乐中发挥着重要的作用 无论是想要分享视频给朋友 还是上传到社交平台或视频网站 视频压缩软件
  • 企业如何为自己的未来做准备?

    如果企业不为未来做准备 就要为出局做准备工作 德鲁克 随着市场需求的不断变化 企业面对着激烈的市场竞争 其该如何为自己的未来做准备 具体企业面临着 建立竞争优势 管理多元化员工队伍 应用新的信息系统与技术 首先 企业在市场竞争中想要建立自己
  • 强化元学习算法在机器人控制中的应用研究

    随着人工智能和机器学习的快速发展 强化学习作为一种重要的机器学习方法 被广泛应用于机器人控制领域 然而 传统的强化学习算法在面对复杂任务和多样化环境时往往需要大量的训练时间和样本 为了解决这个问题 强化元学习算法应运而生 本文将探讨强化元学
  • 微信小程序自定义数据实现级联省市区组件

    前言 在微信小程序中 官方文档提供的省市区组件 可以让用户更加方便快捷地选择省市区 但是官方提供的组件有一个缺点 无法自定义数据 但如果项目中需要使用自己的数据 显然就得寻找其它的组件实现 官方组件 优点 使用官方组件具有稳定性和兼容性 可
  • 137-基于stm32单片机智能保温杯控制装置Proteus仿真+源程序

    资料编号 137 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DS18B20传感器 电机 制作一个基于stm32单片机智能保温杯控制装置Proteus仿真 2 通过DS18b20传感器检测当前保温杯水的温度 并且
  • C++单例模式

    pragma once namespace utility 需要拼接一下命名空间 utility define SINGLETON x friend class utility Singleton
  • 136-基于stm32单片机家庭温湿度防漏水系统设计Proteus仿真+源程序

    资料编号 136 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 蜂鸣器 制作一个基于stm32单片机家庭温湿度防漏水系统设计Proteus仿真 2 通过DHT11传感器检测当前温湿度 并且显示到L
  • 编程分为哪几种

    前言 编程是一项广泛的技能 涉及到许多不同的编程语言和编程领域 以下是编程的一些常见类型 应用程序开发 开发桌面应用程序 移动应用程序 网络应用程序 游戏等等 例如 Java C C Python Swift Objective C Kot
  • 135-基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真+源程序

    资料编号 135 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 电机 超声波传感器 制作一个基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真 2 通过DHT11传感器检测当前
  • 使用python streamlit库快速创建一个购物网站

    streamlit Streamlit 是一个基于 Python 的 Web 应用程序框架 致力于以更高效 更灵活的方式可视化数据 并分析结果 Streamlit是一个开源库 可以帮助数据科学家和学者在短时间内开发机器学习 ML 可视化仪表