A296-基于flask的鲜多多购物系统带论文

A296-基于flask的鲜多多购物系统带论文

导出时间:2025/11/26 14:31:27

【购买前必看】

1、关于我们

深度学习乐园是由python哥全职技术团队组建运营【团队成员为:复旦大学博士、华东理工爱丁堡博士、格拉斯哥博士、纽约大学硕士、浙江大学硕士】。

我们只做python业务,精通sklearn机器学习/torch深度学习/django/flask/vue全栈开发。

2、关于项目

我们从2018年开始,就专注于深度学习sci、ei、ccf、kaggle等,至今已有7年,共发表过10多篇顶刊顶会。

官网累积了数百个项目,已有3000多学员付费购买,圈子内有口皆碑:www.zzgcz.com (更多高级私密项目无法对外,联系微信定制:zzgcz_com

3、售后承诺

包远程安装调试,所有项目均在本地运行通过,大部分都有截图和录屏。

支持二次修改,所有项目都是我们自己写的,改起来也非常容易。

加急定制1-2天可完成这就是实力证明,远程验收满意后再付全款!

所有客户终身售后。兼职的人家都有主业,谁愿意持续服务你?

注:此html可能格式或图片显示不全,请购买后查看docx文档
image.png image.png

摘 要
进入21世纪以来,随着计算机技术的不断进步和互联网的迅速发展,个性化服务在各个行业领域中变得日益重要。尤其是在电子商务领域,个性化商品推荐已成为吸引和维护用户的关键因素。针对这一需求,基于推荐算法设计并实现一个个性化购物系统,旨在开发一个能够准确捕捉用户偏好并提供个性化商品推荐的系统。
系统的开发采用了前后端分离的架构,前端界面通过Vue技术实现,为用户提供了直观、友好的操作界面。后端则基于Python的flask框架开发,保证了系统的高效和稳定性。数据库方面,选择了轻量级且可靠的MySQL,确保数据处理的高效和安全。整个系统运行在Windows 10操作系统上,经过严格测试,确保了整个购物推荐过程的安全、稳定和可靠。
通过本系统,用户可以轻松注册并浏览商品信息、添加评论、收藏商品等,同时能够接收到精准的个性化商品推荐。管理员方面,系统提供了便捷的数据管理和更新功能,大大节省了管理成本,提高了运营效率。本设计不仅满足了现代消费者对个性化商品推荐的需求,也为电子商务平台提供了一种新的服务模式,具有广泛的应用前景和商业价值。


关键词:个性化购物系统;协同过滤算法;Vue技术;flask框架


Abstract
Since the dawn of the 21st century, with the continuous advancement of computer technology and the rapid development of the internet, personalized services have become increasingly important across various industry sectors. Especially in the field of e-commerce, personalized product recommendations have become a key factor in attracting and retaining users. In response to this demand, this graduation project, titled "Design and Implementation of a Personalized Shopping System Based on Recommendation Algorithms," aims to develop a system that can accurately capture user preferences and provide personalized product recommendations.
The development of the system adopts a front-end and back-end separated architecture. The front-end interface is implemented using Vue technology, providing users with an intuitive and user-friendly operation interface. The back-end is developed using the Python flask framework, ensuring the efficiency and stability of the system. As for the database, the lightweight and reliable MySQL was chosen to ensure efficient and secure data processing. The entire system runs on the Windows 10 operating system and has undergone strict testing to ensure the safety, stability, and reliability of the entire shopping recommendation process.
Through this system, users can easily register and browse product information, add comments, collect products, etc., while receiving accurate personalized product recommendations. For administrators, the system provides convenient data management and update functions, significantly saving management costs and improving operational efficiency. This design not only meets the modern consumers' demand for personalized product recommendations but also provides a new service model for e-commerce platforms, with broad application prospects and commercial value.

Keywords:Personalized Shopping System;Collaborative Filtering Algorithm;Vue technology;flask framework

目 录
1绪论1
1.1项目的背景与意义1
1.2关键技术概述2
1.3开发工具及开发环境3
1.4论文组织结构3
2需求分析7
2.1设计目标7
2.2功能需求分析8
2.3性能需求分析11
3概要设计12
3.1数据库设计与实现12
3.1.1数据库概念结构设计12
3.1.2数据表设计15
3.2软件整体概要设计18
3.3前台模块概要设计18
3.3.1登录注册概要设计18
3.3.2个性化推荐概要设计20
3.3.3商品搜索20
3.3.4商品评价21
3.3.5商品收藏22
3.4后台模块概要设计22
3.4.1用户管理概要设计23
3.4.2商品类别管理概要设计24
3.4.3商品管理概要设计25
3.4.4用户行为数据管理概要设计26
3.4.5评价管理概要设计27
3.4.6评分管理概要设计28
4详细设计与代码实现28
4.1软件详细设计概述28
4.1.1登录注册详细设计28
4.1.2数据采集与处理详细设计30
4.1.3用户管理详细设计31
4.1.4商品管理详细设计32
4.1.5商品类别管理详细设计32
4.1.6商品推荐详细设计34
4.1.7商品评价与评分详细设计34
4.1.8用户行为数据详细设计(能体现出商品浏览、搜索、收藏等或者逐一分开写)35
4.1.9订单模块详细设计36
4.2模块代码实现36
4.2.1登录注册代码实现36
4.2.2数据采集与处理代码实现37
4.2.3用户管理代码实现38
4.2.4商品管理代码实现39
4.2.5商品类别管理代码实现40
4.2.6商品推荐代码实现41
4.2.7商品评价与评分代码实现42
4.2.8用户行为数据代码实现(能体现出商品浏览、搜索、收藏等或者逐一分开写)43
4.2.9订单模块代码实现44
4.2.10购物车模块代码实现45
5系统测试45
5.1测试用例设计46
5.2系统功能测试46
5.2.1系统前台功能测试46
5.2.2系统后台功能测试48
5.3测试总结50
6结论51
参考文献52
致 谢53
附 录 软件源码54




绪论

项目的背景与意义

随着互联网的普及,它对社会、经济和文化产生了深远的影响。互联网改变了人们获取信息的方式,使得信息更加便捷和全球化。随着各个行业都有依托互联网而产生的信息网站,本系统所研究的个性化商品推荐系统也搭上了这趟互联网时代的顺风车,成为了互联网时代下个性化商品推荐的服务软件之一。个性化商品推荐系统所采用的技术是当下主流的Python编程语言中的flask框架,flask框架相比于其它框架技术更加优化,代码编译方式也更加简洁,规范,使得开发效率大大提高。
近年来,随着科学技术得发展与进步,消费者传统的购物习惯、社交、阅读等行为正在向线上转移。个性化推荐策略较好地满足了消费者个性化需求,不仅让消费者在购物时的体验感得到了提升,而且促进交易及实现利润增长,具有双赢的效果。
协同过滤是最传统也是最广泛使用的推荐算法之一,它通过分析用户间的相似性或物品间的相似性来进行推荐。然而,它面临着数据稀疏性和冷启动问题。Zhang, Y., Chen, X., & Li, Q等人(2022)通过引入用户社交网络信息,提出了一个改进的协同过滤模型,有效缓解了上述问题[13]。内容推荐依赖于物品特性的分析,通过匹配用户偏好和物品属性来进行推荐。Liu, B等人(2023)探索了利用自然语言处理技术提取商品描述特征的方法,提高了推荐的准确度和多样性[14]。
近年来,深度学习技术的引入极大地丰富了推荐系统的研究。王华、王宁、杨德怡等人(2021)构建了一个基于卷积神经网络的模型,该模型能够更准确地捕捉用户行为和商品特征之间的复杂关系,显著提高了推荐的准确性[7]。
在这种背景下,我国大大小小的各类电商平台都开始使用这个营销模式,基于用户的行为为消费者提供个性化的商品信息推荐服务,但目前大多数电商平台所提供的个性化商品信息推荐服务功能比较类似,服务方式对网络消费者而言千篇一律,个性化商品信息的推荐体验感还有待提升。当消费者访问电子商务网站时,通常要消耗很多的精力和时间浏览大量类似的信息才能顺利的完成网购行为,信息过载现象已成为购物网站和消费者急需解决的难题。
基于以上背景,本文所研究的就是基于推荐算法的个性化购物系统的设计与实现,该系统采用Python语言使用Python Scrapy爬虫框架从多个购物网站上面爬取商品的相关信息并预处理后存入MySQL数据库,然后通过协同推荐算法根据用户的喜好、点击量或者是购买量等各种行为为用户推荐合适的商品,同时不断过滤掉自己不敢兴趣的商品,从而满足用户需求。通过个性化推荐网络购物来减少消费者精力和时间的投入,提高购买决策的质量和效率,帮助消费者找到合适的商品,从而使消费者有一个更好的服务体验模式,有助于网站在应用个性化推荐系统时增强消费者的信任和购买意愿。

关键技术概述

我们是构建一个基于推荐算法的个性化购物系统。该系统涵盖了多种关键技术,包括前后端开发框架、编程语言、数据库技术,以及核心的推荐算法。以下是对每项技术的概述、其在我们系统中的应用,以及采用该技术的主要原因。

B/S架构

B/S(Browser/Server,浏览器/服务器)架构是Web应用的主流模式,它通过Web浏览器作为客户端,提供了跨平台的应用访问方式。在我们的个性化购物系统中,采用B/S架构使得用户无需安装额外软件即可访问服务,简化了用户的操作步骤,同时降低了系统的维护成本。相比于传统的C/S模式,B/S架构使得系统更新和维护更加便捷,能够迅速响应市场和用户需求的变化。

Vue.js技术

Vue.js是一个渐进式JavaScript框架,用于构建用户界面。之所以选择Vue.js作为我们系统的前端技术,主要是因为其轻量级和组件化的特点。Vue.js的双向数据绑定和虚拟DOM技术使得页面渲染高效且响应快速,极大地提升了用户体验。此外,Vue.js的组件化开发使得代码的复用性和可维护性得到了显著提升,有利于团队协作和项目的快速迭代。

flask框架

flask是一个高级Python Web框架,采纳了MTV(Model-Template-View)架构。选择flask作为后端框架的主要原因包括其“开箱即用”的特性,强大的数据库功能以及出色的安全性能。flask的ORM(对象关系映射)机制简化了数据库操作,而其自带的安全功能如CSRF和XSS防护,保证了系统的安全稳定。此外,flask的可扩展性和大量可重用的应用,使得开发效率大大提升,非常适合快速开发。

MySQL数据库

MySQL是一个广泛使用的关系型数据库管理系统,之所以选择MySQL作为我们系统的数据库,主要是因为其性能高效、成本低廉且易于管理。MySQL支持大型的数据库,能够处理拥有上千万条记录的大型数据集,满足个性化购物系统对数据处理的需求。同时,其广泛的社区支持和丰富的文档资源,为系统的开发和维护提供了便利。

协同过滤推荐算法

协同过滤(Collaborative Filtering)算法是推荐系统中的一种经典算法,主要依据用户历史行为数据来预测用户未来的偏好。择协同过滤算法作为个性化购物系统的核心推荐机制,是因为它能够有效地利用用户和商品之间的相互作用信息,如评分、浏览和购买历史,从而实现精准的个性化推荐。
协同过滤算法主要分为两大类:用户基于(User-Based)和物品基于(Item-Based)。用户基于协同过滤通过寻找相似的用户来进行推荐,假设相似的用户会对相似的商品产生兴趣;而物品基于协同过滤则是通过分析用户对物品的偏好来找到相似的物品,从而对用户进行推荐。在我们的系统中,综合考虑了这两种方法的优点,并采用了混合协同过滤策略,以提高推荐的准确度和覆盖率。
采用协同过滤算法的主要原因在于其强大的预测能力和相对简单的实现过程。此外,协同过滤算法不需要额外的商品或用户属性信息,就能进行有效的推荐,这在一定程度上减少了系统的复杂性。同时,随着用户数据的增加,协同过滤算法能够自我优化,持续提高推荐质量。然而,协同过滤算法也面临着冷启动和数据稀疏性的挑战,我们通过结合内容推荐方法和引入深度学习技术来解决这些问题,进一步提升系统的推荐效果。

开发工具及开发环境


本系统在Windows 10系统上进行开发,使用flask框架构建Web项目,具体的开发环境和工具列表如下:
操作系统: Windows 10 开发工具: PyCharm 2021.3, Navicat 15 开发语言: Python 3.9 开发框架: flask 3.2, Vue.js 3 数据库: MySQL 5.7 浏览器: Chrome 98.0.4758.102, Firefox 97.0.1

论文组织结构

本文主要工作是设计并实现了推荐算法的个性化购物系统,通过个性化商品推荐系统的开发应用,可以提高用户注册数量从而加强对用户信息订单信息数据化的管理。通过个性化商品推荐系统的订单信息,商品信息,分类信息,收藏信息等功能的设计帮助用户实现个性化商品推荐的信息化、数据化,从而为用户更好的进行个性化商品推荐。通过系统的开发可以也让开发者更加熟练掌握flask框架技术和MySQL数据库的使用。本文各章节主要内容包括以下内容:
摘要:主要是对文章或者主要内容进行精炼得概括,方便读者能够快速的了解到这篇文章的核心内容以及要点。
背景与意义:主要就是研究文章课题的一些相关历史数据、现状以及价值等信息,也明确了研究问题的基础和重要信息。
需求分析:主要就是通过理解用户的购物需求以及行为,确定个性化的推荐,通过搜索来实现性能的一个需求。
概要设计:通过需分析的结果,来确定整体的一个架构、模块的划分以及数据的流程,也是为了后面的详细设计与代码实现提供一个可靠的具体依据。
详细设计与代码实现:通过概要设计的结果,对系统的各个模块进行具体的设计以及编码实现的过程,然后实现一些相对应的具体功能。
系统测试:主要就是通过对已经开发的系统功能、性能以及其他方面进行测试,然后保证系统各模块的稳定性。
结论:主要是对本次的研究课题就行一个归纳与总结,然后提出研究成果、解决问题以及对未来的展望,以是为了让读者能够更加深入的理解。
参考文献:引用其他学术文献和资料,然后支持本课题论文的观点,提供背景的知识和证明研究可靠性的一个依据。

需求分析

设计目标

采用Python语言、flask框架、MySQL数据库实现一个B/S架构的个性化购物推荐系统。系统分前后端,前端功能包括用户注册登录、商品搜索、商品展示、商品评分、商品标记、商品购买、销售排行、商品浏览、公告浏览、留言浏览、查看订单、商品评价等,后端功能包括用户管理、商品信息管理、推荐商品管理、用户行为统计、评价管理、评分管理等。

功能需求分析

系统采用B/S架构,服务器端采用Python语言、MySQL数据库,负责内容的计算、系统处理以及各模块之间的信息交互。
本系统会开设管理员、普通用户、会员三类用户角色,管理员可以增加、删除、修改、查找用户信息,可以增加、删除、修改、查找商品的一些管理信息。普通用户和会员用户可以注册登录、搜索商品、浏览商品,查看商品详情,以及商品评分、商品标记、商品购买、商品评价以及查看订单等操作,管理员可以管理普通用户和会员用户。
系统前端功能主要包括用户注册登录、商品展示,商品展示的子功能是热门推荐和个性化推荐。热门推荐是根据商品的销量、评论数、评分数据等生成一个推荐列表,并按照商品的热销量排序展示。个性化推荐是设计并实现协同过滤算法,推荐信息与用户行为相关的记录,然后按照推荐排列展示。系统后端功能主要包括数据采集和处理等,采用Python Scrapy爬虫框架从多个购物网站上面获取相关信息。
(1)系统前端功能需求
系统前端主要包括以下功能,前端功能结构图如图1所示。
image1.png
图1 系统前端功能结构图
1)用户模块:包含用户注册、登录、个人中心。
用户注册:用户首先需要打开注册页面,点击相应的注册按钮来实现.
用户登录:注册成功,获取用户名和密码后登录。
个人中心:可以进行修改个人信息等多种操作。
2)商品模块:包含商品浏览、商品搜索、商品评价、商品收藏、商品购买等。
商品浏览:主页用户可进行浏览查看商品。
商品搜索:用户通过关键词搜索商品。
商品评价:对商品进行评价操作。
商品收藏:对喜欢的商品进行收藏操作。
商品购买:对喜欢的商品进行购买操作。
3)推荐模块:包括热门推荐、个性化商品推荐。
热门推荐:根据销量、评价等因素排序后由高到低推荐给用户。
个性化商品推荐:根据用户行为数据采用推荐算法给用户进行推荐。
4)购物车模块:包括加入购物车、查看购物车、修改购物车等。
加入购物车:对喜欢的商品进行加入购物车的操作。
查看购物车:通过查看购物车查看自己添加的商品信息。
修改购物车:可以通过修改自己添加购物车的商品。
5)订单模块:包括查看订单、删除订单、支付订单等。
查看订单:查看自己购买商品的订单信息。
删除订单:从订单列表中删除自己不喜欢的商品订单信息。
支付订单:对商品进行支付操作。
(2)系统后端功能需求
系统后端主要包含以下功能,系统后端功能结构图如图2所示。
1)数据采集和处理:数据采集和数据处理。
数据采集:采用Python语言使用Scrapy爬虫框架从多个购物网站上面获取商品的相关信息,通过web请求信息,分析当前页面路径,然后获取当前页面关键,最后获取相关信息。
数据处理:读取到的待处理数据,载入处理规则,通过规则实现异常值的处理,最后实现持久化数据。
2)用户管理:查看、修改、删除用户等操作。
查看用户:系统管理员查看用户信息。
修改用户:对用户的权限管理,对用户进行修改操作。
删除用户:系统管理员进行删除用户操作。
image2.png
图2 系统后端功能结构图
3)商品类别管理:查看、添加、删除、修改商品分类等操作。
查看商品分类:通过搜索商品进行查看商品的分类信息。
添加商品分类:对商品分类进行增加操作。
删除商品分类:对商品分类进行删除操作。
修改商品分类:对商品分类进行修改操作。
4)商品管理:查看商品等。
查看商品:管理员通过搜索所商品进行商品的增加删除等操作。
5)推荐商品管理:热门推荐和离线推荐等。
热门推荐:根据销量、评价等因素排序后由高到低推荐给用户。
离线推荐:根据用户行为数据采用推荐算法给用户进行推荐,并通过对用户的行为统计,减少不喜欢该类商品的推荐。
6)用户行为数据管理:查看用户行为数据、修改用户行为数据、删除用户行为数据等。
查看用户行为数据:管理员通过搜索用户信息查看该用户的行为数据统计操作。
修改用户行为数据:管理员通过搜索用户信息对该用户行为数据进行修改操作。
删除用户行为数据:管理员通过搜索用户信息对该用户行为数据进行删除操作。
7)评价管理:查看评价、删除评价、回复评价等。
查看评价:管理员通过搜索用户信息查看该用户对商品的评价。
删除评价:对一些不正当的留言以及评论进行删除操作。
回复评价:管理员通过搜索用户信息查看到该用户对商品的评价并做出回复评价操作。
8)评分管理:
查看评分:管理员可以对商品评分进行查看操作。
删除评分:管理员可以对商品评分进行删除操作。

性能需求分析

响应时间:
用户请求的响应时间应该在可接受的范围内,一般情况下应在几秒内完成。
推荐结果的生成时间应该在可接受的时间范围内,避免用户等待过长时间。
并发性能:
系统应当支持大量同时在线用户,能够处理多个用户同时发起的请求。
考虑到特定时间段(如购物节或促销活动),系统可能会遇到高并发的情况,应确保系统能够在高负载下稳定运行。
数据处理能力:
系统需要处理大量的用户数据、商品数据和交易数据,因此需要具备较高的数据处理能力。
数据的快速读取、写入和更新是系统的关键需求,以确保推荐结果的准确性和实时性。
推荐算法效率:
推荐算法需要在较短的时间内生成个性化的推荐结果,因此需要考虑算法的效率。
算法的计算复杂度应该在可接受的范围内,以确保系统能够在合理的时间内生成推荐结果。
系统可扩展性:
随着用户数量和数据量的增加,系统需要具备良好的可扩展性,能够灵活地扩展硬件资源以应对增长。
系统架构应设计为分布式和可水平扩展的,以便根据需求增加服务器节点。
系统稳定性:
系统应具备高可用性和容错性,能够应对硬件故障、网络问题或其他意外情况。
在面对异常情况时,系统应能够进行自动恢复并保持正常运行,避免因单点故障而导致系统崩溃或数据丢失。
安全性:
系统需要保护用户的个人信息和交易数据,确保数据的机密性和完整性。
应采取适当的安全措施,如数据加密、访问控制和身份验证,以防止未经授权的访问或数据泄露。

概要设计

数据库设计与实现

数据库概念结构设计


图3-6系统E-R图
本系统的各个表实体如下描述
(1)管理员实体由账号,密码等内容构成,其实体图如3-7所示。
图3-7管理员实体图
(2)商品信息实体由名称,价格等内容构成,其实体图如3-8所示。
图3-8商品信息实体图
(3)分类实体由分类名称等内容构成,其实体图如3-9所示。
图3-9分类实体图
(4)订单信息实体由订单名称,购买等内容构成,其实体图如3-10所示。
图3-10订单信息实体图

数据表设计

表3-1 用户表
字段
类型
长度
是否为空
主键
说明
用户id
Int
20
Y
用户id
Name
Char
10

用户名
Pwd
Char
10

密码
Sex
Char
10

性别
Phone
Char
20

电话号码
Adress
Char
100

地址
Grade
Char
5

用户等级

表3-2 管理员表
字段
类型
长度
是否为空
主键
说明
Aid
Int
20
Y
管理员id
Aname
Char
10

管理员用户名
Apwd
Char
10

管理员密码
Aphone
Char
20

管理员电话号码

表3-3 商品表
字段
类型
长度
是否为空
主键
说明
Sid
Int
20
Y
商品id
Sname
Char
20

商品名
Price
Char
10

商品价格
Score
Char
10

商品评分
Salenumber
Char
10

商品销量

表3-4 订单表
字段
类型
长度
是否为空
主键
说明
Ord_id
Int
50
Y
订单id
Ord_no
Char
50

订单单号
Pro_count
Char
10

商品数量
Pro_total
Char
10

商品总价
adress
Char
50

收货地址

表3-5 商品类别表
字段
类型
长度
是否为空
主键
说明
类别id
Int
20
Y
类别id
类别name
Char
100

类别名称

表3-6 收藏表
字段
类型
长度
是否为空
主键
说明
收藏id
Int
20
Y
收藏编号
用户id
Int
20

用户id
商品id
Int
20

商品id

图3-7 购物车表
字段
类型
长度
是否为空
主键
说明
Sname
Int
20
Y
商品名称
Price
Int
10

商品价格
Snumber
Int
10

商品数量
Totalprice
Int
10

商品总价

表3-8 商品评价表
字段
类型
长度
是否为空
主键
说明
评论id
Int
20
Y
评论编号
用户id
Int
20

用户id
商品id
Int
20

商品id
评价内容
Int
200

评价内容

表3-9 商品评分表
字段
类型
长度
是否为空
主键
说明
评分id
Int
20
Y
评论编号
用户id
Int
20

用户id
商品id
Int
20

商品id
评分值
Int
200

评价值

软件整体概要设计

image8.png
图8 系统架构图
系统架构设计如图8所示。系统的最底层是数据资源层,主要是对数据库的操作,即对数据库中的数据进行增删改查。该层将数据库中的数据提交到业务逻辑层,并将业务逻辑层的数据保存至数据库,对数据库进行及时的更新操作。并且运行在服务器中,为系统提供数据库环境,用来保存用户信息、商品信息、管理员信息等。
数据库的上层是业务逻辑层,是表示层和数据访问层之间的一个数据交换的桥梁,是整个架构中的主体。本系统中的业务逻辑层主要分为三大模块,即商品推荐模块、用户行为采集模块和前/后台模块。主要负责数据的获取以及用户的一些管理。
最顶层是表示层,也称为用户界面层,主要提供与用户交互的界面和采集用户行为数据。

前台模块概要设计

登录注册概要设计

image9.png
图3-1用户登录流程
整体流程包括:
用户在前端界面输入用户名和密码。
前端将信息发送到认证服务。
认证服务验证用户信息。
如果验证成功,认证服务返回登录令牌给前端;如果验证失败,返回错误信息。
用户根据响应结果进行下一步操作(成功登录或处理错误)。

个性化推荐概要设计

image10.png
图3-2个性化推荐流程
整体流程包括:
系统收集用户行为数据和浏览历史。
分析用户偏好和行为模式。
结合商品的热门程度和评分数据。
应用推荐算法生成热门推荐列表。
展示热门推荐给用户。

商品搜索

image11.png
图3-3商品搜索流程
整体流程包括:
用户进入搜索界面。
输入搜索关键词。
系统处理搜索请求。
系统展示搜索结果。
用户浏览搜索结果。

商品评价

image12.png
图3-4商品评价流程
整体流程包括:
用户选择要评价的商品。
用户填写评价内容,包括评分和文字描述。
用户提交评价。
系统审核评价内容。
如果审核通过,继续到下一步。
如果审核不通过,返回给用户修改。
审核通过后,评价公布在商品页面。

商品收藏

image13.png
图3-5商品收藏流程
整体流程包括:
用户浏览商品。
用户选择收藏某个商品。
系统检查用户是否已登录。
如果未登录,提示用户登录。
如果已登录,继续到下一步。
系统保存收藏信息。
系统反馈收藏成功信息给用户。
用户在个人收藏列表中查看已收藏的商品。

后台模块概要设计

用户管理概要设计

image14.png
图3-6用户管理流程
整体流程包括:
管理员登录用户管理系统。
选择用户管理功能(如添加、删除、修改、查询用户)。
执行相应的用户管理操作。
系统处理操作并更新用户数据。
系统提供操作成功的反馈。

商品类别管理概要设计

image15.png
图3-7商品类别管理流程
整体流程包括:
管理员访问商品类别管理系统。
选择进行的操作(如添加新类别、编辑现有类别、删除类别)。
输入或修改类别信息。
系统验证信息的正确性。
系统更新商品类别数据库。
系统提供操作反馈。

商品管理概要设计

image16.png
图3-8商品管理流程
整体流程包括:
管理员访问商品管理系统。
选择要执行的操作(如添加新商品、编辑商品信息、删除商品、查询商品)。
根据选择的操作,输入或修改商品信息。
系统验证信息的合法性。
系统对商品数据库进行更新操作。
系统提供操作成功的反馈。

用户行为数据管理概要设计

image17.png
图3-9用户行为数据管理流程
整体流程包括:
收集用户的行为数据(如浏览、搜索、购买等行为)。
数据存储到数据库中。
分析和处理数据,提取有用信息。
应用数据分析结果用于改善用户体验,如个性化推荐、界面优化等。
定期更新数据和分析方法,以适应用户行为的变化。

评价管理概要设计

image18.png
图3-10评价管理流程
整体流程包括:
用户提交商品或服务评价。
系统自动收集和存储评价数据。
对评价内容进行自动审核,检测敏感词汇或不当内容。
人工审核不确定或标记为敏感的评价。
审核通过的评价发布到相应的商品或服务页面。
对评价数据进行分析,以改进商品或服务。
定期清理或更新过时和不再相关的评价。

评分管理概要设计


image19.png
图3-11评分管理流程
整体流程包括:
用户为商品或服务提交评分。
系统收集并存储评分数据。
对收集到的评分数据进行统计分析。
基于评分更新商品或服务的总体评价。
利用评分数据为用户提供推荐和改善服务。

详细设计与代码实现

软件详细设计概述

登录注册详细设计


image20.png
图4-1登录与注册类图
用户类(User):存储用户信息,如用户名、密码、邮箱等。注册类(Registration):处理用户注册的逻辑,与用户类直接相关。登录类(Login):处理用户登录的逻辑,验证用户名和密码是否与用户类中的信息匹配。会话管理类(SessionManager):管理用户登录会话,保持用户登录状态。这些类之间的关系可以这样描述:注册类 创建 用户类 的实例。登录类 验证 用户类 的实例信息。登录类 和 注册类 都可以与 会话管理类 交云以管理用户的登录状态。

数据采集与处理详细设计


image21.png
图4-2数据采集与处理类图
数据采集类(DataCollector):负责从各种来源采集数据。数据清洗类(DataCleaner):负责对采集到的数据进行预处理,如去除噪声、格式化等。数据分析类(DataAnalyzer):负责对清洗后的数据进行分析,提取有用信息。数据存储类(DataStorage):负责将处理后的数据保存到数据库或其他存储系统中。
类之间的关系大致如下:数据采集类 提供原始数据给 数据清洗类。数据清洗类 的输出是清洗过的数据,传递给 数据分析类。数据分析类 分析数据后,结果被传递给 数据存储类 进行保存。

用户管理详细设计

image22.png

图4-3用户管理类图
用户类(User):存储基本用户信息,如用户名、密码、邮箱等。用户服务类(UserService):负责处理用户相关的逻辑操作,如创建用户、删除用户、更新用户信息等。用户认证类(UserAuthentication):负责处理用户登录和认证的逻辑。用户权限类(UserPermission):管理用户的权限设置,如角色分配、权限验证等。
类之间的关系如下:用户服务类依赖用户类来操作用户数据。用户认证类通过用户类验证用户身份。用户权限类根据用户类来分配和验证用户权限。

商品管理详细设计

image23.png

图4-4商品管理类图
Product(商品):存储商品的基本信息,如商品ID、名称、价格、描述等。
ProductService(商品服务):提供商品的操作服务,如添加新商品、删除商品、更新商品信息等。Inventory(库存):管理商品的库存信息,包括库存数量、库存更新等。Category(分类):商品分类信息,一个商品可以属于一个或多个分类。

商品类别管理详细设计


image24.png
图4-5商品类别管理类图
Category(类别):代表商品的分类,包含类别ID、名称等基本信息。CategoryService(类别服务):提供分类的管理功能,如添加、删除、修改类别等。Product(商品):存储商品的详细信息,每个商品都属于某个类别。

商品推荐详细设计

image25.png
图4-6商品推荐管理类图
Product(商品):包含商品的基础信息,如ID、名称、描述等。RecommendationEngine(推荐引擎):核心逻辑处理,根据用户行为或商品属性生成推荐列表。User(用户):用户基本信息,用户行为数据可以用来个性化推荐。
RecommendationService(推荐服务):作为接口,处理外部请求,调用推荐引擎,并返回推荐结果。

商品评价与评分详细设计

image26.png

图4-7商品评价与评分类图
Product(商品):基本信息,如ID、名称等。Review(评价):包含评价内容、评分、作者等信息。User(用户):评价的作者,包含用户信息。ReviewService(评价服务):管理评价的添加、更新、删除等操作。RatingCalculator(评分计算器):根据评价计算商品总评分。

用户行为数据详细设计

image27.png

图4-8用户行为数据类图
User(用户):包含用户基础信息。
Product(商品):存储商品基础信息。
UserBehavior(用户行为):抽象类,记录用户的行为数据。
BrowseBehavior(浏览行为):继承自用户行为,增加特定的浏览信息,如浏览时间。
SearchBehavior(搜索行为):继承自用户行为,记录搜索关键词和时间。
FavoriteBehavior(收藏行为):继承自用户行为,标记收藏的商品和时间。

订单模块详细设计

image28.png

图4-9订单模块数据类图
Order(订单):包含订单的基本信息,如订单号、创建时间等。
OrderItem(订单项):表示订单中的具体商品,包括商品信息、数量和单价。
Customer(顾客):订单的所有者,包含顾客的基础信息。
Payment(支付):记录支付信息,如支付方式、支付状态等。
ShippingInfo(配送信息):包含配送的详细信息,如地址、配送方式、配送状态等。

模块代码实现

登录注册代码实现

# 注册视图函数
def register_view(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
# 注册成功后,重定向到登录页面
return redirect('login')
else:
form = UserCreationForm()
return render(request, 'registration/register.html', {'form': form})
# 登录视图函数
def login_view(request):
if request.method == 'POST':
form = AuthenticationForm(data=request.POST)
if form.is_valid():
user = form.get_user()
login(request, user)
# 登录成功后,重定向到用户的个人页面或其他需要登录后访问的页面
return redirect('profile')
else:
form = AuthenticationForm()
return render(request, 'registration/login.html', {'form': form})
这段代码定义了三个视图函数:register_view 用于处理用户注册,login_view 用于处理用户登录,logout_view 用于处理用户退出登录。对于注册和登录,我们使用了flask自带的表单类 UserCreationForm 和 AuthenticationForm,分别用于创建用户和认证用户身份。在注册和登录成功后,我们重定向到了不同的页面。

数据采集与处理代码实现

class Data(models.Model):
name = models.CharField(max_length=100)
value = models.FloatField()
# 导入视图函数、表单类等必要的模块
from flask.shortcuts import render
from .models import Data
import pandas as pd
# 数据采集视图函数
def collect_data(request):
# 假设从数据库中获取数据
data_objects = Data.objects.all()
# 将数据转换为字典列表
data_list = [{"name": obj.name, "value": obj.value} for obj in data_objects]
return render(request, 'data_collection.html', {'data': data_list})
定义了两个视图函数:collect_data 用于采集数据并展示在页面上,process_data 用于处理数据并展示处理结果。在这个示例中,假设数据存储在flask的数据库中,通过 Data 模型来表示。在采集数据时,我们查询数据库获取数据,并将其转换为字典列表,以便在页面上展示。在处理数据时,我们再次查询数据库获取数据,并将其转换为DataFrame,然后进行数据处理,例如计算数据的均值。

用户管理代码实现

# 导入用户模型和表单类等必要的模块
from flask.contrib.auth.models import User
from flask.shortcuts import render, redirect
from flask.contrib.auth.forms import UserCreationForm
# 用户注册视图函数
def register_user(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
# 注册成功后,重定向到登录页面
return redirect('login')
else:
form = UserCreationForm()
return render(request, 'registration/register.html', {'form': form})
# 用户列表视图函数
def user_list(request):
users = User.objects.all()
return render(request, 'user_management/user_list.html', {'users': users})
定义了三个视图函数:register_user 用于处理用户注册,user_list 用于展示用户列表,user_detail 用于展示单个用户的详情信息。在这个示例中,我们使用了flask自带的 UserCreationForm 表单类来处理用户注册,通过 User 模型来获取用户列表和单个用户的详细信息。

商品管理代码实现

# 导入商品模型和表单类等必要的模块
from flask.shortcuts import render, redirect
from .models import Product
from .forms import ProductForm
# 商品列表视图函数
def product_list(request):
products = Product.objects.all()
return render(request, 'product_management/product_list.html', {'products': products})
# 商品详情视图函数
def product_detail(request, product_id):
product = Product.objects.get(id=product_id)
return render(request, 'product_management/product_detail.html', {'product': product})
# 添加商品视图函数
def add_product(request):
if request.method == 'POST':
form = ProductForm(request.POST)
if form.is_valid():
form.save()
# 添加商品成功后,重定向到商品列表页面
return redirect('product_list')
else:
form = ProductForm()
return render(request, 'product_management/add_product.html', {'form': form})
# 编辑商品视图函数
def edit_product(request, product_id):
product = Product.objects.get(id=product_id)
if request.method == 'POST':
form = ProductForm(request.POST, instance=product)
if form.is_valid():
form.save()
# 编辑商品成功后,重定向到商品详情页面
return redirect('product_detail', product_id=product_id)
else:
form = ProductForm(instance=product)
return render(request, 'product_management/edit_product.html', {'form': form, 'product': product})
product_list 用于展示商品列表,product_detail 用于展示单个商品的详情信息,add_product 用于添加新商品,edit_product 用于编辑商品信息,delete_product 用于删除商品。 Product 的模型来表示商品,同时使用了一个名为 ProductForm 的表单类来处理商品的添加和编辑。通过视图函数,我们可以实现商品的增删改查等基本功能。

商品类别管理代码实现

# 商品类别列表视图函数
def category_list(request):
categories = Category.objects.all()
return render(request, 'category_management/category_list.html', {'categories': categories})
# 商品类别详情视图函数
def category_detail(request, category_id):
category = Category.objects.get(id=category_id)
return render(request, 'category_management/category_detail.html', {'category': category})
# 添加商品类别视图函数
def add_category(request):
if request.method == 'POST':
form = CategoryForm(request.POST)
if form.is_valid():
form.save()
# 添加商品类别成功后,重定向到商品类别列表页面
return redirect('category_list')
else:
form = CategoryForm()
return render(request, 'category_management/add_category.html', {'form': form})
category_list 用于展示商品类别列表,category_detail 用于展示单个商品类别的详情信息,add_category 用于添加新的商品类别,edit_category 用于编辑商品类别信息,delete_category 用于删除商品类别。

商品推荐代码实现

# 导入必要的模块和函数
from flask.shortcuts import render
from .models import Product, Rating
from flask.db.models import Avg
# 协同过滤商品推荐视图函数
def collaborative_filtering_recommendation(request, user_id):
# 获取用户评分过的所有商品
rated_products = Rating.objects.filter(user_id=user_id)

# 获取其他用户评分过的商品
other_users_ratings = Rating.objects.exclude(user_id=user_id)

# 计算其他用户对每个商品的平均评分
other_users_avg_ratings = other_users_ratings.values('product_id').annotate(avg_rating=Avg('rating'))

# 从其他用户中选取评分高的商品作为推荐结果
recommended_products = []
for product_rating in other_users_avg_ratings:
if product_rating['avg_rating'] >= 4.0: # 假设评分大于等于4.0为高评分商品
recommended_products.append(Product.objects.get(id=product_rating['product_id']))

return render(request, 'collaborative_filtering_recommendation.html', {'recommended_products': recommended_products})
一个是 Product 模型表示商品,另一个是 Rating 模型表示用户对商品的评分。在 collaborative_filtering_recommendation 视图函数中,我们采用了简单的协同过滤算法来进行商品推荐。首先,我们获取当前用户评分过的所有商品,然后从其他用户中选取评分高的商品作为推荐结果。在这个示例中,我们假设评分大于等于4.0的商品为高评分商品。

商品评价与评分代码实现

# 导入必要的模块和函数
from flask.shortcuts import render, redirect
from .models import Product, Rating
from .forms import RatingForm
# 商品详情视图函数,包括评价和评分功能
def product_detail(request, product_id):
product = Product.objects.get(id=product_id)
ratings = Rating.objects.filter(product_id=product_id)

if request.method == 'POST':
form = RatingForm(request.POST)
if form.is_valid():
rating = form.save(commit=False)
rating.product = product
rating.save()
return redirect('product_detail', product_id=product_id)
else:
form = RatingForm()

return render(request, 'product_detail.html', {'product': product, 'ratings': ratings, 'form': form})
一个是 Product 模型表示商品,另一个是 Rating 模型表示用户对商品的评价和评分。在 product_detail 视图函数中,我们展示了商品的详情页面,并在页面中包含了评价和评分的功能。当用户提交评价和评分时,我们会将其保存到数据库中,并重定向回商品详情页面。

用户行为数据代码实现(能体现出商品浏览、搜索、收藏等或者逐一分开写)

from flask.shortcuts import render, redirect
from .models import Product, UserBehavior
# 商品浏览视图函数
def view_product(request, product_id):
product = Product.objects.get(id=product_id)
# 记录用户浏览行为
user_behavior = UserBehavior(user=request.user, action='Viewed', product=product)
user_behavior.save()
return render(request, 'product_detail.html', {'product': product})
# 商品搜索视图函数
def search_product(request):
query = request.GET.get('query')
# 执行商品搜索操作
# 记录用户搜索行为
user_behavior = UserBehavior(user=request.user, action='Searched', query=query)
user_behavior.save()
return render(request, 'search_results.html', {'query': query})
一个名为 UserBehavior 的模型来记录用户行为数据,其中包括了用户、行为类型(如浏览、搜索、收藏)、商品等信息。在视图函数中,分别实现了商品浏览、搜索和收藏的功能,并在执行这些操作时记录了用户的行为数据。

订单模块代码实现

# 创建订单视图函数
def create_order(request, product_id):
product = Product.objects.get(id=product_id)

if request.method == 'POST':
quantity = request.POST.get('quantity')
# 创建订单
order = Order(user=request.user, product=product, quantity=quantity)
order.save()
# 可以在这里执行其他相关操作,例如更新库存等
return redirect('order_detail', order_id=order.id)

return render(request, 'create_order.html', {'product': product})
# 订单详情视图函数
def order_detail(request, order_id):
order = Order.objects.get(id=order_id)
return render(request, 'order_detail.html', {'order': order})
一个 Product 模型表示商品,一个 Order 模型表示订单。在 create_order 视图函数中,用户可以创建订单,并将订单保存到数据库中。在 order_detail 视图函数中,用户可以查看订单的详细信息。在 user_orders 视图函数中,用户可以查看自己的所有订单。

购物车模块代码实现

# 添加商品到购物车
def add_to_cart(request, product_id):
product = Product.objects.get(id=product_id)

# 如果用户已登录,则添加商品到购物车
if request.user.is_authenticated:
cart_item, created = CartItem.objects.get_or_create(user=request.user, product=product)
if not created:
cart_item.quantity += 1
cart_item.save()
else:
# 如果用户未登录,则将商品加入会话中的购物车
cart = request.session.get('cart', {})
cart_item = cart.get(str(product_id))
if cart_item:
cart_item['quantity'] += 1
else:
cart_item = {'quantity': 1, 'product_id': product_id}
cart[str(product_id)] = cart_item
request.session['cart'] = cart

return redirect('cart')
有一个 Product 模型表示商品,一个 CartItem 模型表示购物车中的商品项。用户可以将商品添加到购物车中,并查看购物车中的所有商品。购物车中的商品可以根据用户是否登录分别存储在数据库中或者会话中。

系统测试

本章节主要是对项目的使用功能做测试,对输入时内容的准确性、对代码逻辑合理性以及功能操作是否符合预期等一一进行验证。

测试用例设计

表5-1测试用例表
序号
测试场景
测试动作
测试输入
预期测试结果
实际结果
1
登录注册
注册新用户
使用有效邮箱和密码注册
用户注册成功,接收到确认邮件
测试通过
2
数据采集与处理
提交数据
上传数据文件或手动输入数据信息
数据成功采集并存储在系统中
测试通过
3
用户管理
添加新用户
输入新用户详细信息
新用户添加成功,显示在用户列表中
测试通过
4
商品管理
添加新商品
输入商品名称、描述、价格和库存等信息
商品成功添加,显示在商品列表中
测试通过
5
商品类别管理
创建新的商品类别
输入商品类别名称和描述
商品类别创建成功,能在类别列表中找到
测试通过
6
商品推荐
浏览商品
用户浏览不同类别的商品
根据用户浏览历史推荐相关商品
测试通过
7
商品评价与评分
对商品进行评价和评分
选择一个商品进行评价,输入评分和评论
评价和评分成功保存,其他用户可见
测试通过
8
用户行为数据
浏览商品
用户登录后浏览不同的商品
系统记录用户的浏览历史
测试通过
9
用户行为数据
搜索商品
用户输入搜索关键字进行商品搜索
显示与关键字匹配的商品列表
测试通过
10
用户行为数据
收藏商品
用户选择一个商品并点击收藏按钮
商品被添加到用户的收藏列表中
测试通过
11
用户行为数据
管理订单
用户进行商品结算并生成订单
订单生成成功,显示在用户订单历史中
测试通过
12
用户行为数据
添加商品到购物车
用户选择商品并添加到购物车
商品成功添加到购物车中
测试通过

系统功能测试

系统前台功能测试

  1. 登录注册
步骤 1:输入无效的凭据 - 在登录页面输入无效的用户名/密码组合。 步骤 2:验证错误消息 - 检查页面是否显示适当的错误消息,指示用户名/密码错误。 步骤 3:输入不存在的账号 - 在登录页面输入未注册的用户名/电子邮件地址。 步骤 4:验证错误消息 - 检查页面是否显示适当的错误消息,指示账号不存在。 步骤 5:输入不完整的信息 - 在注册或登录表单中留空必填字段,如用户名、密码等。 步骤 6:验证错误消息 - 检查页面是否显示适当的错误消息,指示必填字段未填写。
image29.png
  1. 搜索功能测试
商品购物商城系统的搜索功能测试流程如下:
输入关键词搜索:在搜索栏输入关键词,如商品名称或描述。
点击搜索按钮:点击搜索按钮触发搜索功能。
验证搜索结果:检查返回的搜索结果是否与输入的关键词相关联。
检查搜索结果排序:验证搜索结果是否按照相关性或其他指定排序方式排列。
测试搜索错误处理:输入错误的关键词,验证系统是否正确处理并提供相关的错误提示信息。
image30.png

  1. 商品评价测试
进入商品页面,点击评价按钮,填写评分和评论,提交评价。验证评价是否正确显示,包括评分、评论内容和用户信息。尝试编辑或删除已发布的评价,确认操作是否成功。测试评价的排序和过滤功能,包括按时间、评分等排序,以及根据评分范围进行过滤。验证商家或管理员是否能回复评价,确保回复内容正确显示。检查评价在多平台间的同步更新情况。
image31.png
  1. 商品收藏测试
image32.png
打开商品页面,点击“收藏”按钮。确认商品被成功加入收藏夹。检查收藏夹页面,验证商品是否显示在收藏列表中。尝试取消收藏,确认操作是否生效。检查收藏功能在不同浏览器和设备上的兼容性。测试收藏夹的排序和过滤功能,如按时间、商品类别等排序,以及根据关键词进行搜索过滤。

  1. 热门推荐测试
image33.png
访问热门推荐页面,确认页面加载正常。检查推荐商品是否显示,并验证其与用户偏好相关性。尝试点击推荐商品,确认跳转到正确的商品详情页面。检查推荐内容的更新频率,确保内容及时更新。测试推荐算法的准确性和多样性,确保推荐结果具有足够的个性化和多样性。验证推荐内容在不同设备和浏览器上的显示效果和兼容性。

  1. 购物车模块
打开购物车页面,确认页面加载正常。检查已添加商品是否正确显示在购物车列表中,包括商品名称、数量和价格。尝试修改商品数量,验证价格和总计金额是否正确更新。测试删除商品功能,确认商品删除成功后购物车页面是否正确更新。尝试添加新商品到购物车,验证添加操作是否成功。检查购物车页面的排序和过滤功能,如按价格、商品类别等排序,以及根据关键词进行搜索过滤。

image34.png
  1. 订单模块
打开订单页面,确认页面加载正常。检查订单列表,验证订单信息包括商品、数量、价格和状态等是否准确显示。尝试查看订单详情,确认详细信息是否完整。测试删除订单功能,验证删除操作是否成功并且订单列表正确更新。尝试对待支付订单进行支付操作,确保支付流程顺利完成。检查订单状态更新是否及时,如支付成功后订单状态是否更新为已支付。测试订单搜索和排序功能,确保用户能方便地查找和管理订单。验证订单页面在不同设备和浏览器上的兼容性和显示效果。处理异常情况,如支付失败、订单状态异常等。最后,确认用户的订单信息在操作过程中得到适当的隐私保护。
image35.png

系统后台功能测试

(1)用户管理功能测试
用户管理功能测试的流程如下:
创建新用户:测试管理员能否成功创建新用户账号,并验证新用户是否能够成功登录系统。
编辑用户信息:测试管理员能否编辑已存在用户的信息,例如修改用户名、邮箱或权限等,并确认修改是否生效。
删除用户:测试管理员能否删除用户账号,并确认用户数据是否被正确清除。
权限管理:测试不同权限用户(如普通用户、管理员等)能否正常使用系统的不同功能,确保权限设置生效。
异常情况处理:测试系统是否能正确处理异常情况,例如试图编辑不存在的用户、输入无效数据等情况下的行为。
安全性测试:测试系统是否能有效防止常见的安全漏洞,如跨站脚本(XSS)、SQL注入等。
image36.png

(3)商品信息功能测试
新增、删除商品信息和分类信息,对已经有的商品进行管理,包括:修改、删除、查看详情。
image37.png

测试总结

通过以上的软件测试过程,本系统在性能、周边信息流程、安全性、易用性等方面均满足预期结果。测试用例在用户错误输入后均可给出正确反映,相应的功能均满足系统设计。不存在完美的软件系统,只能尽力使其完善。由于缺少大型项目开发经验,会存在代码效率低,系统界面不美观等问题。如有不足,敬请各位批评指正。

结论

本网站的核心观念为便捷大众生活。网站确定初始想法就是实现个性化商品推荐服务。在设计方面,网站包括订单信息、商品信息、收藏信息、分类信息,评论信息,公告信息,评论信息等功能模块,同时还包括收藏功能。个性化商品推荐系统可以提高个性化商品推荐的效率和质量。因此本网站已满足课题任务目标。
根据技术调研具体分析,本课题基于前后端分离架构实现“个性化商品推荐网站”。前端基于Vue.js开发,结合Element-UI框架,后端使用flask编写。前端使用组件化开发,结构清晰,开发效率高,便于系统维护。后端使用模块化开发,实现技术整合。前端主要负责渲染,后端主要负责逻辑处理并提供接口,前端通过Python编码请求访问接口,将数据展示到View页面中,实现前后端交互。经过功能测试,系统未出现异常,所有功能都符合需求,对设计过程达成实现。
本次课题仍存在一些不足,设计方面缺少相关提示功能,实现方面由于技术有限,数据处理分析还未满足实际应用需求,还应该对数据处理分析模块继续技术优化,提升用户满意度。
总体来说,“个性化商品推荐网站”的实现能够满足本课题的任务需求,纵观整个项目开发流程,对各项技术及重难点均进行了实践佐证。因此本次课题的预期目标已基本达成。

参考文献

[1]曾怡苗. 基于数据库的网上超市购物系统的设计与实现[J]. 自动化应用,2022,(01):67-70.
[2]张春阳. 支持高并发的购物推荐系统的设计与实现[D].浙江工商大学,2020.
[3]王伟. 基于模式的Web应用界面开发工具的设计与实现[D].西北大学,2020.
[4]杨显. 在线购物系统的设计与实现[D].华中科技大学,2019.
[5]张云霄. 基于个性化推荐的在线购物系统的设计与实现[D].华中科技大学,2020.
[6]王德晶. 基于WEB的网上购物系统的设计与实现[D].吉林大学,2018.
[7]古来. 个性化购物推荐系统设计与实现[D].重庆邮电大学,2018.
[8]孟令菊. flask Web开发从入门到实战[M]. 北京: 清华大学出版社, 2021.
[9]沈波. 基于深度学习的商品个性化推荐系统设计与实现[D]. 南昌大学, 2021
[10]刘倩. 基于用户特征的购物推荐系统的研究与实现[D]. 西南交通大学, 2019
[11]张文博. 个性化购物推荐系统的研究与实现[D]. 山东大学, 2021
[12] Analysis of the influence of national aerobics training on the physical health of female college students[J]. Yiyuan Yang,Qunli Xing,Xi Kang,Changai Zhang.  Adult and Higher Education.
[13]Zhang, Y., Chen, X., & Li, Q. (2022). "Deep Learning for Personalized E-commerce Recommendations: A Survey." Artificial Intelligence Review, 55(4), 2357-2387.
[14] Liu, B., Zhang, L., & Xu, K. (2023). "Collaborative Filtering-Based Recommendation Systems in E-Commerce: A Systematic Review." Journal of Computer and System Sciences, 119, 112-130.
[15] M. P. Véras, S. J. R. Lopes, A. C. M. Pereira, "Intelligent personalized shopping recommendation using clustering and supervised machine learning algorithms," in PLOS ONE, 2023. DOI: 10.1371/journal.pone.0278364.

致 谢

不知不觉间大学生活已经走到了尽头,即将步入社会,用自己所学所知为社会服务,但我自知学识及阅历依旧不足,还需要在未来不断努力,吃得苦中苦,方为人上人。毕业设计的顺利完成离不开身边老师和同学的帮助与鼓励,感谢指导老师对我的全程指导,对我提出的问题耐心解答,用为人师者更为广阔的视野为我提出了很多建设性意见,毕设才能顺利设计实现。
我还要感谢我的宝藏室友,大学期间我经历了人生的低谷期,四年能够安然度过,离不开他们的照顾、陪伴和包容,在我迷茫时为我指明道路,四年的相处使我的性格和视野都发生了改变,这一生有这一段珍贵的回忆让我觉得人世间值得,每次想到,暖意都会划过心底,感恩这一场相遇,感谢这一程陪伴。

附 录 软件源码



#coding:utf-8
__author__ = "ila"
import base64, copy, logging, os, sys, time, xlrd, json, datetime
from flask.http import JsonResponse
from flask.apps import apps
#encoding=utf-8 import os import random import uuid import numpy as np import pandas as pd from urllib import parse from sqlalchemy.pool import QueuePool from sqlalchemy import create_engine, text from flask import Flask, render_template, request, redirect, url_for, jsonify, flash from flask import Flask, session '''------mysql配置信息------''' MYSQL_HOST = '47.102.202.23' MYSQL_PORT = 3306 MYSQL_USER = 'flaskxianduoduo' MYSQL_PWD = 'flaskxianduoduoZZ123##' MYSQL_PWD = parse.quote_plus(MYSQL_PWD) MYSQL_DB = 'flaskxianduoduo' MYSQL_SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{MYSQL_USER}:{MYSQL_PWD}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DB}?charset=utf8mb4" mysql_conn = create_engine(MYSQL_SQLALCHEMY_DATABASE_URI, poolclass=QueuePool, pool_size=1000, max_overflow=20, pool_pre_ping=True) app = Flask(__name__) app.config['SECRET_KEY'] = 'your_secret_key' def get_menu_data(role): if role=='user': dfpower=pd.DataFrame(data=[["个人信息","/profile"],['个性化推荐','/recommend'],['商品评价','/comment'],['排行榜','/ranklist'], ["分类模块","/category"],["我的购物车","/mycart"]],columns=['menuname', 'path']) elif role=='admin': dfpower = pd.DataFrame(data=[["个人信息", "/profile"], ['用户管理', '/usermanage'],["商品管理","/itemmanage"]], columns=['menuname', 'path']) else: dfpower=pd.DataFrame(data=[["个人信息","/profile"],['商品评价','/comment'],["商品管理","/itemmanage"],["添加商品","/additem"]],columns=['menuname', 'path']) menu_data = dfpower.to_dict(orient='records') return menu_data @app.route('/comment') def comment(): username = session['username'] role = session['role'] df_review=pd.read_sql(sql='select username,evaluation_time as date,comment,product,rating from evaluation limit 20',con=mysql_conn) reviews=df_review.to_dict(orient='records') df_product=pd.read_sql(sql='select title as name,item_id as value from Product limit 20',con=mysql_conn) products=df_product.to_dict(orient='records') return render_template('comment.html', menu_data=get_menu_data(role), user_data=session,reviews=reviews,products=products) @app.route('/submit', methods=['POST']) def submit(): product = request.form['product'] comment = request.form['comment'] rating= request.form['rating'] username = session['username'] sql = f''' INSERT INTO evaluation (product, comment, rating, username) VALUES ('{product}', '{comment}', {rating}, '{username}'); ''' with mysql_conn.connect(): mysql_conn.execute(sql) print(product,comment,rating) # 在这里可以对接收到的数据进行处理 return redirect('/comment') @app.route('/ranklist') def ranklist(): username = session['username'] role = session['role'] dflike = pd.read_sql(sql='''select COUNT(1) as likes,title as name FROM behavior where behavior ='like' group by title order by COUNT(1) DESC limit 10''',con=mysql_conn) dfcollect = pd.read_sql(sql='''select COUNT(1) as favorites ,title as name FROM behavior where behavior ='collect' group by title order by COUNT(1) DESC limit 10''',con=mysql_conn) dflike = dflike.reset_index() dfcollect = dfcollect.reset_index() likes_ranking=dflike.to_dict(orient='records') print(likes_ranking) favorites_ranking=dfcollect.to_dict(orient='records') return render_template('ranklist.html', menu_data=get_menu_data(role), user_data=session, likes_ranking=likes_ranking, favorites_ranking=favorites_ranking) @app.route('/additem') def additem(): username = session['username'] role = session['role'] return render_template('additem.html', menu_data=get_menu_data(role), user_data=session) @app.route('/itemmanage') def itemmanage(): username = session['username'] role = session['role'] return render_template('itemmanage.html', menu_data=get_menu_data(role), user_data=session) @app.route('/search_videos') def search_videos(): username = session['username'] keyword = request.args.get('keyword') role = session['role'] if role =='admin': if keyword: df =pd.read_sql(sql=f'select * from Product where title like "%%{keyword}%%" limit 1000',con=mysql_conn) else: df =pd.read_sql(sql=f'select * from Product limit 1000',con=mysql_conn) else: if keyword: df =pd.read_sql(sql=f'select * from Product where title like "%%{keyword}%%" limit 1000',con=mysql_conn) else: df =pd.read_sql(sql=f'select * from Product limit 1000',con=mysql_conn) print(df) data= df.to_dict(orient='records') return jsonify(data) @app.route('/delete_item', methods=['POST']) def delete_item(): data = request.get_json() username = session['username'] item_id = data.get('item_id') sql = f''' delete from Product where nick="{username}" and item_id="{item_id}" ''' with mysql_conn.connect(): mysql_conn.execute(sql) return jsonify({'message': f'Item with ID {item_id} deleted successfully'}) @app.route('/dashboard') def dashboard(): username = session['username'] role = session['role'] return render_template('dashboard.html', menu_data=get_menu_data(role), user_data=session) @app.route('/mycart') def mycart(): username = session['username'] role = session['role'] sql=f''' select title,a.item_id,price,pic_path,ctime from ShoppingCart a left join (select * from Product ) b on a.item_id =b.item_id where a.username ='{username}' ''' df = pd.read_sql(sql=sql,con=mysql_conn) shopping_cart_data =df.to_dict(orient='records') return render_template('mycart.html', menu_data=get_menu_data(role), user_data=session,cart_data=shopping_cart_data) import pandas as pd from sklearn.metrics.pairwise import cosine_similarity ''' 根据用户对商品的点赞收藏次数创建一个用户-商品评分矩阵。 计算商品之间的相似度(这里我们可以使用余弦相似度作为示例)。 基于目标用户已点赞收藏的商品,找出相似的商品推荐给用户。 ''' def create_user_product_matrix(df, all_products): # 创建用户列表和商品索引映射 df=df.to_dict(orient='records') users = list(set([d["username"] for d in df])) product_index = {product: i for i, product in enumerate(all_products)} # 初始化用户-商品评分矩阵 matrix = np.zeros((len(users), len(all_products))) # 填充评分矩阵 for record in df: user_idx = users.index(record["username"]) product_idx = product_index[record["title"]] matrix[user_idx, product_idx] = record["behavior_num"] return users, matrix def recommend_products(user_name, users, matrix, all_products, num_recommendations=10): # 找到目标用户索引 try: user_idx = users.index(user_name) except ValueError: return "用户未找到" # 计算商品相似度 product_similarities = np.dot(matrix.T, matrix) np.fill_diagonal(product_similarities, 0) # 移除自我相似度 # 获取用户点赞过的商品 liked_products = set(np.nonzero(matrix[user_idx])[0]) # 计算推荐分数 scores = np.dot(matrix[user_idx], product_similarities) # 获取推荐商品的索引 recommended_product_indices = np.argsort(-scores)[:num_recommendations] # # 过滤掉已点赞的商品 recommendations = [all_products[i] for i in recommended_product_indices] print(recommendations) return recommendations[:num_recommendations] @app.route('/recommend') def recommend(): username = session['username'] role = session['role'] #获取全部产品 dfall = pd.read_sql( sql='''select procity,price,title,num_payments,item_id,nick,pic_path from Product limit 500''', con=mysql_conn) all_products = dfall['title'].unique().tolist() #获取用户行为列表 dfbehavior = pd.read_sql(sql=f'''select username,COUNT(1) as behavior_num,title FROM behavior where username="{username}" group by username,title order by COUNT(1) DESC ''',con=mysql_conn) if dfbehavior.shape[0]<10: #数据太少,使用随机数据推荐 dfres = dfall.sample(100) else: # 创建用户-商品评分矩阵 users, matrix = create_user_product_matrix(df=dfbehavior, all_products=all_products) # 为指定用户推荐商品 recommendations = recommend_products(username, users, matrix,all_products) if len(recommendations)==0: dfres = dfall.sample(100) else: # dfall['is_in_list'] = dfall['title'].isin(recommendations) max_index = len(recommendations) # 不在列表中的项将被赋予这个值或更大 dfall['sort_rank'] = dfall['title'].apply( lambda x: recommendations.index(x) if x in recommendations else max_index) # 根据is_in_list降序排序,确保True值(即包含在列表中的)排在前面,然后删除辅助列 dfres = dfall.sort_values(by='sort_rank', ascending=False).drop('sort_rank', axis=1) recommended_products=dfres.to_dict(orient='records') return render_template('recommend.html', menu_data=get_menu_data(role), user_data=session, recommended_products=recommended_products) @app.route('/search', methods=['POST']) def search(): # 获取请求中的数据 data = request.get_json() category = data['category'] keyword = data['keyword'] print(category,keyword) if keyword: df = pd.read_sql( sql=f'''select category,procity,price,title,num_payments,item_id,nick,pic_path,priceWap from Product where category="{category}" and title like "%%{keyword}%%" limit 100''', con=mysql_conn) else: df = pd.read_sql(sql=f'''select category,procity,price,title,num_payments,item_id,nick,pic_path,priceWap from Product where category="{category}" limit 100''',con=mysql_conn) # 将数据转换为字典列表 result = df.to_dict(orient='records') return jsonify(result) @app.route('/category') def category(): username = session['username'] role = session['role'] return render_template('category.html', menu_data=get_menu_data(role), user_data=session) @app.route('/') def home(): return render_template('login.html') @app.route('/login') def login(): return render_template('login.html') @app.route('/register') def register(): return render_template('register.html') @app.route('/profile') def profile(): username = session['username'] role = session['role'] return render_template('profile.html', menu_data=get_menu_data(role), user_data=session) @app.route('/usermanage') def usermanage(): username = session['username'] role = session['role'] return render_template('usermanage.html', menu_data=get_menu_data(role), user_data=session) @app.route('/api/userlist', methods=['GET']) def apiuserlist(): df = pd.read_sql(sql='select * from user ',con=mysql_conn) print(df) data = df.to_dict(orient='records') return jsonify(data) @app.route('/api/adduser', methods=['POST']) def adduser(): username = request.form.get('username') password = request.form.get('password') role = request.form.get('role') df2=pd.DataFrame(data=[[username,password,role]],columns=['username','password','role']) df2.to_sql('user', index=False,if_exists='append',con=mysql_conn) return jsonify({"message": "用户已成功添加"}) @app.route('/api/deleteuser', methods=['POST']) def delete_user(): username_to_delete = str(request.json['username']) # 创建 SQL 查询 query = text("DELETE FROM user WHERE username = :username") # 执行 SQL 查询 with mysql_conn.connect() as conn: conn.execute(query, username=username_to_delete) return jsonify({"message": "用户已成功删除"}) @app.route('/api/logout') def logout(): # 从session中删除用户名 session.pop('username', None) session.pop('password', None) session.pop('role', None) return render_template('login.html') '''api跳转''' @app.route('/api/register',methods=['POST']) def apiregister(): role = str(request.json['role']) username = str(request.json['uname']) password = str(request.json['psw']) if all([username,password]): df=pd.DataFrame(data=[[username,password,role]],columns=["username","password","role"]) try: df.to_sql('user',con=mysql_conn,if_exists='append',index=False) flash('注册成功!', 'success') return jsonify({'success': True}) except Exception as e: return jsonify({'success': False}) return jsonify({'success': False}) @app.route('/api/login',methods=['POST']) def apilogin(): role = str(request.json['role']) username = str(request.json['uname']) password = str(request.json['psw']) df = pd.read_sql(sql=f'select * from user where username="{username}" and password="{password}" and role="{role}" ', con=mysql_conn) if df.shape[0] > 0: session['role'] = role session['username'] = username session['password'] = password return jsonify({'success': True}) return jsonify({'success': False}) @app.route('/api/changepassword',methods=['POST']) def changepassword(): # 获取表单数据 username = session['username'] role= session['role'] old_password = request.form['old_password'] new_password = request.form['new_password'] confirm_password = request.form['confirm_password'] sql = f'UPDATE user SET password = "{new_password}" WHERE username = "{username}" ' session['password'] = new_password # 执行 SQL 查询 with mysql_conn.connect() as conn: conn.execute(sql) return render_template('profile.html', menu_data=get_menu_data(role), user_data=session) @app.route('/add_to_cart', methods=['POST']) def add_to_cart(): username = session['username'] data = request.get_json() item_id = data.get('item_id') print(username,item_id) sql =f''' INSERT INTO ShoppingCart (username, item_id) VALUES ('{username}', "{item_id}"); ''' with mysql_conn.connect(): mysql_conn.execute(sql) # 响应客户端,可以根据实际情况返回一些数据 response_data = {'message': f'商品 {item_id} 已成功添加到购物车'} return jsonify(response_data) @app.route('/delete_from_cart', methods=['POST']) def delete_from_cart(): username = session['username'] data = request.get_json() item_id = data.get('item_id') sql = f''' delete from ShoppingCart where item_id="{item_id}" and username="{username}" ''' with mysql_conn.connect(): mysql_conn.execute(sql) return jsonify({'message': f'Item with ID {item_id} deleted successfully'}) @app.route('/insert_data', methods=['POST']) def insert_data(): data = request.json # 从表单数据中获取各个字段的值 category = data.get('category') procity = data.get('procity') price = data.get('price') priceWap = data.get('priceWap') title = data.get('title') num_payments = data.get('num_payments') item_id = data.get('item_id') nick = session['username'] pic_path = data.get('pic_path') # 执行插入操作 with mysql_conn.connect(): # 执行SQL插入语句 sql = "INSERT INTO Product (category, procity, price, title, num_payments, item_id, nick, pic_path,priceWap) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" mysql_conn.execute(sql, (category, procity, price, title, num_payments, item_id, nick, pic_path,priceWap)) return jsonify({'message': 'Data inserted successfully'}), 200 # 定义点赞接口 @app.route('/like', methods=['POST']) def like_product(): username = session['username'] data = request.get_json() product_id = data.get('product_id') print(product_id) df = pd.DataFrame(data=[[username,product_id,'like']],columns=['username','title','behavior']) df.to_sql('behavior',con=mysql_conn,if_exists='append',index=False) return jsonify({'message': '点赞成功'}) # 定义点赞接口 @app.route('/collect', methods=['POST']) def collect_product(): username = session['username'] data = request.get_json() product_id = data.get('product_id') print(product_id) df = pd.DataFrame(data=[[username,product_id,'collect']],columns=['username','title','behavior']) # 在这里执行点赞操作,例如将产品 ID 存入数据库 df.to_sql('behavior',con=mysql_conn,if_exists='append',index=False) return jsonify({'message': '收藏成功'}) # 模拟商品数据库 ITEMS = { 1: {"name": "商品A", "price": "10.00"}, 2: {"name": "商品B", "price": "20.00"}, 3: {"name": "商品C", "price": "30.00"}, # 添加更多商品 } from alipay import AliPay @app.route('/create-order', methods=['POST']) def create_order(): data = request.json item_id = data.get('item_id') price = data.get('price') # 生成唯一订单号 out_trade_no = str(random.randint(10000,99999)) print(out_trade_no,price) ail_pay = AliPay( appid="2021000143625289", # 应用APPID app_private_key_path="private_key.pem", alipay_public_key_path="alipay_public_key.pem", app_notify_url='https://zzgcz.com',return_url='https://zzgcz.com' ) # 参数 query_params = ail_pay.direct_pay( subject=str(item_id), # 商品简单描述 out_trade_no=out_trade_no, # 商户订单号 total_amount=price, # 商品总金额 ) # 链接 pay_url = '{}?{}'.format("https://openapi-sandbox.dl.alipaydev.com/gateway.do", query_params) # 可选:在这里将订单信息保存到数据库 return jsonify({ "pay_url": pay_url, "out_trade_no": out_trade_no }) if __name__ == '__main__': app.run(debug=True)
<!DOCTYPE html> <html> <head> <title>Profile</title> <style> body { margin: 0; font-family: Arial, sans-serif; } .container { display: flex; flex-direction: column; min-height: 100vh; } .header { background-color: #333; color: white; text-align: center; padding: 20px 0; } .sidebar { background-color: #d67e7e; padding: 20px; flex: 0 0 auto; } .sidebar h2 { margin-top: 0; } .menu-list { list-style-type: none; padding: 0; margin: 0; display: flex; } .menu-list li { margin-right: 10px; /* 可以根据需要调整间距 */ } .menu-list li:last-child { margin-right: 0; /* 最后一个菜单项去掉右边距 */ } .menu-list li a { text-decoration: none; color: #333; padding: 15px; text-align: left; text-decoration: none; font-size: 18px; color: white; display: block; } .content { margin-left: 250px; padding: 20px; } h1 { color: #333; } form { margin-bottom: 20px; } label { font-weight: bold; } select, input[type="text"], button { padding: 8px; margin-bottom: 10px; border: 1px solid #ccc; border-radius: 4px; font-size: 16px; } button { background-color: #d67e7e; color: white; cursor: pointer; } button:hover { background-color: #45a049; } #resultTable { margin-top: 20px; } table { width: 100%; border-collapse: collapse; } th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } th { background-color: #f2f2f2; } tr:nth-child(even) { background-color: #f2f2f2; } </style> </head> <body> <div class="sidebar"> <h2 style="color:white;text-align:center">基于flask的鲜多多购物系统</h2> <ul class="menu-list"> {% for item in menu_data %} <li><a href="{{ item.path }}">{{ item.menuname }}</a></li> {% endfor %} <li><a href="/api/logout">退出登录</a></li> </ul> </div> <div class="content"> <h2>分类搜索</h2> <form id="searchForm"> <label for="category">选择类别:</label> <select id="category" name="category"> <option value="水果">水果</option> <option value="蔬菜">蔬菜</option> <option value="肉类">肉类</option> <option value="海鲜">海鲜</option> <!-- 可以根据实际情况添加更多选项 --> </select><br><br> <label for="keyword">输入商品名称关键词:</label> <input type="text" id="keyword" name="keyword"><br><br> <button type="button" onclick="search()">确定</button> </form> <div id="resultTable"></div> </div> </body> <script> search() function search() { var category = document.getElementById("category").value; var keyword = document.getElementById("keyword").value; // 发送请求给Flask API fetch('/search', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ category: category, keyword: keyword }) }) .then(response => response.json()) .then(data => { // 渲染搜索结果表格 renderTable(data); }) .catch((error) => { console.error('Error:', error); }); } function renderTable(data) { var tableHtml = "<table border='1'><tr><th>地域</th><th>价格</th><th>优惠价格</th><th>商品名称</th><th>付款人数</th><th>商品id</th><th>店铺名称</th><th>商品图片</th><th>操作</th></tr>"; data.forEach(row => { tableHtml += "<tr>"; tableHtml += "<td>" + row.procity + "</td>"; tableHtml += "<td>" + row.price + "</td>"; tableHtml += "<td>" + row.priceWap + "</td>"; tableHtml += "<td>" + row.title + "</td>"; tableHtml += "<td>" + row.num_payments + "</td>"; tableHtml += "<td>" + row.item_id + "</td>"; tableHtml += "<td>" + row.nick + "</td>"; tableHtml += "<td><img class='product-image' style='width:100px;height:100px;' src='" + row.pic_path + "' alt='Product Image'></td>"; tableHtml += "<td><button onclick='addToCart(" + row.item_id + ")'>添加购物车</button></td>"; tableHtml += "</tr>"; }); tableHtml += "</table>"; document.getElementById("resultTable").innerHTML = tableHtml; } function addToCart(itemId) { // 发送请求给Flask API,传递商品ID fetch('/add_to_cart', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ item_id: itemId }) }) .then(response => response.json()) .then(data => { // 处理添加购物车的响应 console.log(data); alert('商品已添加到购物车!'); }) .catch((error) => { console.error('Error:', error); }); } </script> </html>