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

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 osdef 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 productsdef 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.productsproduct_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应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/193247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[GPT-1]论文实现:Improving Language Understanding by Generative Pre-Training

Efficient Graph-Based Image Segmentation 一、完整代码二、论文解读2.1 GPT架构2.2 GPT的训练方式Unsupervised pre_trainingSupervised fine_training 三、过程实现3.1 导包3.2 数据处理3.3 模型构建3.4 模型配置 四、整体总结 论文:Improving Language Understa…

Gossip 协议

Gossip 协议 背景 在分布式系统中,不同的节点进行数据/信息共享是一个基本的需求。 一种比较简单粗暴的方法就是 集中式发散消息,简单来说就是一个主节点同时共享最新信息给其他所有节点,比较适合中心化系统。这种方法的缺陷也很明显&…

Hdoop学习笔记(HDP)-Part.20 安装Flume

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

ubuntu下快速搭建docker环境训练yolov5数据集

参考文档 yolov5-github yolov5-github-训练文档 csdn训练博客 一、配置环境 1.1 安装依赖包 前往清华源官方地址 选择适合自己的版本替换自己的源 # 备份源文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list_bak # 修改源文件 # 更新 sudo apt update &&a…

LinuxBasicsForHackers笔记 --常用Linux命令

在终端中修改用户密码命令:passwd Linux的文件系统是逻辑文件系统。 Linux基本命令 pwd – print working directory. 返回你当前所在目录结构中的位置。 whoami – 查看您当前登录的用户身份。 cd – change directory. 从终端更改目录。 cd / – 移动到根目录…

数据结构与算法(Java) -单调队列单调栈题单

单调队列(灵神笔记) 239 滑动窗口最大值 239. 滑动窗口最大值 - 力扣(LeetCode) 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗…

Skywalking接入实际应用做日志跟踪

Skywalking客户端挂载 从官网下载skywalking-agent客户端,并挂在到应用服务器指定目录 挂载到应用主机中,好处是解决打包应用镜像的时候,镜像过大,部署成本过高。 docker-compose部署应用,并接入skywalking服务,这里以gateway为例 versio…

Webgis学习总结

前言: 作者跟随视频学习了webgis内容进行如下学习复习总结 参考:新中地学习笔记 WebGIS第一课:测试高德API并通过: 注册申请高德API成为开发者,创建自己的项目和key进行项目初始化,可以使用JS API官方文…

26. 深度学习进阶 - 深度学习的优化方法

Hi, 你好。我是茶桁。 上一节课中我们预告了,本节课是一个难点,同时也是一个重点,大家要理解清楚。 我们在做机器学习的时候,会用不同的优化方法。 SGD 上图中左边就是Batch Gradient Descent,中间是Mini-Batch Gra…

【Linux】第二十五站:深入理解文件系统

文章目录 一、前言二、认识硬件----磁盘1.基本介绍2.磁盘的存储构成3.磁盘的逻辑结构4.回归到硬件 三、文件系统1.划分2.Block group(1)Data blocks(2)inode Table(3)Block Bitmap(4)inode Bitmap(5)Group Descriptor Table(GDT)(6)Super Block 3.总结4.一些其他问题5.如何理解…

untiy webgl常见问题与操作

文章目录 1 untiy和网页相互通信2 打开新页面(同标签页和新标签页)3 获取网页的URL4 解析Url内的参数5 后处理与色彩空间问题 1 untiy和网页相互通信 看这个文章 2 打开新页面(同标签页和新标签页) 先看本文untiy和网页相互通信…

翻译: GPT4等大型语言模型的原理解析和未来预测慢思考和模型自我迭代和LLM安全

YouTube: Intro to Large Language Models - YouTube 1. Large Language Model LLM 大家好,最近我做了一个关于大型语言模型的 30 分钟演讲,有点像介绍性演讲,不幸的是,那个演讲没有被录制下来,但很多人在演讲结束后…

基于JNI实现调用C++ SDK

基于JNI实现调用C SDK 背景分析解决实践 背景 上篇文章总结了几种Java项目调用C/C SDK项目方法,在逐一实践、踩坑后,最终还是敲定采用 JNI 方式进行实现。在文章开始的过程,会先大概讲讲笔者遇到的情况,因为封装方式需要根据实际…

MQTT客户端、代理(broker)和连接建立

在前篇文章(http://t.csdnimg.cn/IamPz)中,介绍了发布/订阅架构和MQTT如何据此交换信息,其中的关键概念是: 发布/订阅架构触耦了负责发布信息的客户端(发布者)和负责接收信息的客户端&#xff…

[c]求逆序数

#include<stdio.h> int main() {int n,i,count;scanf("%d",&n);int arr[n];count0;for(i0;i<n-1;i){scanf("%d",&arr[i]);}for(int j0;j<n-2;j)//注意是小于等于n-2&#xff0c;因为倒数第一个元素后面没有数了&#xff0c;不需要比较…

CSC173 Boolean Logic and Boolean Circuits

We have provided code for a simple Boolean circuit simulator written i n C

韵达速递查询,韵达速递单号查询,对需要的单号进行备注

批量查询韵达速递单号的物流信息&#xff0c;对需要的单号进行备注。 所需工具&#xff1a; 一个【快递批量查询高手】软件 韵达速递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;并登录 步骤2&#xff1a;点击主界面左上角的“…

基于SpringBoot + vue的在线视频教育平台

qq&#xff08;2829419543&#xff09;获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;springboot 前端&#xff1a;采用vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xf…

王炸cpu-龙芯3A6000

国产 CPU 性能媲美 Intel 酷睿这事儿&#xff0c;可能真的已经实现了。 没错&#xff0c;那颗有着多次爆料拉满大家期待值的龙芯 3A6000&#xff0c;终于正式发布。 就在今天上午&#xff0c;龙芯中科在 2023 年龙芯产品发布暨用户大会上正式带来了这颗 CPU。 整场发布会 PPT …

【选择题】校招笔试选择题第一辑

题目 以下程序的运行结果是&#xff08; &#xff09; #include <stdio.h> int main(void) {printf("%s , %5.3s\n", "computer", "computer");return 0; }A. computer , puter B. computer , com C. computer , computer D. computer…