【基于Python的电商系统设计与实现14000字(论文)】_第1页
【基于Python的电商系统设计与实现14000字(论文)】_第2页
【基于Python的电商系统设计与实现14000字(论文)】_第3页
【基于Python的电商系统设计与实现14000字(论文)】_第4页
【基于Python的电商系统设计与实现14000字(论文)】_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第16页共35页基于Python的电商系统设计与实现目录TOC\o"1-3"\h\u29222序言 324846第1章引言 4291431.1现状分析 479801.2系统开发的背景 5203671.3论文的主要工作 520208第2章项目技术的概述 7128362.1前端技术简介 7275692.2数据库简介 7163862.3Django简介 82142.3服务器简介 9758第3章系统设计 10299393.1系统开发及技术背景 1090463.2需求分析 12718第4章系统设计 15321114.1系统设计原则 15306184.2数据库设计 1527491第5章系统详细设计与实现 19183995.1首页模块 19119855.2详情模块 21227745.3注册模块 212665.4登录模块 2228085.5购物车模块 24178205.6后台管理模块 2514862第6章系统测试 2916986.1登录功能测试 29199796.2注册功能测试 2954576.3用户功能测试 30143766.4商品订单测试 31128276.5管理员功能测试 31306046.6测试总结 3215688总结 3323065参考文献 35序言随着网络的快速发展,各个行业都进军了网络世界,最为突出的就是电商,相对于陈旧的线下商城,线上的商城有着各式各样的款式供选择,并且随着快递行业的发展,线上商城的存在让人们的生活变得尤为的方便,尤其在疫情期间的使用更为广泛。自网络时代的到来,电商行业便大肆更改了营业模式,从以前限制性很强的线下模式进入了几乎零限制的线上模式,现如今我国b2c行业中的典型代表有着近6000万的用户注册数,这就大大证明了线上商城对人们所带来的便利。本设计是基于Django技术开发一个以鞋为主体的线上商城平台,使用VisualStudioCode开发环境,Python为开发语言,MySQL作为数据库,建立一个专属于自己的线上商城平台,让人们可以在该平台自由的挑选自己喜欢的鞋子。本文包含五个章节,第一章节为引言,描述系统的开发背景及和意义,系统实现的主要目标;第二章节为项目技术概述,描述项目运用的技术和其优缺点;第三章节为系统分析,涵盖总体思路分析,系统功能模块分析等;第四章节为系统的设计,表明系统的数据图和具体结构;第五章节是系统详细设计与实现,详细说明了系统的一些技术难点以及展示效果。第六章是系统测试,主要对系统中的主要功能进行了测试和分析。

第1章引言1.1现状分析随着网络技术的迅速发展,互联网已经成为人们知道一切现状的主要选择工具,互联网本身就有着传播性快的特征,就对应着这一特征,产生了很多新型行业,线上商城就是其中一种。在传统的店铺行业中,客户还都是以过路形式进入店铺,久而久之就只有老客户会进入固定的店铺进行选购,只有当推出新活动或者促销时才会吸引新顾客,所以从传统店铺角度而言,如何吸引新顾客成了最大的难题。随着线上商城的推出和互联网的快速发展,快递行业的快速跟进,线上商城的普及速度可想而知,以至于现在的人们除了闲暇时间会去街上转转,做做回头客之外,其余的购物时间大多在家里,只需要一台电脑或者一个手机就行,极大的方便了人们的生活。现线上商城行业大多为寄售模式,商铺只需在寄售平台进行寄售即可。和绝大多数电子商务网站相比,我将用波特五力模型对线上商城行业环境进行简单分析,首先,在供应商的议价能力上,由于线上商城拥有大批量的忠实用户而且拥有较强的商业信誉,所以,很多供应商都想在线上商城上落户以创造更大利润、占有更大市场,这样的话,供应商在线上商城面前就变得很被动,所以作为供应商而言,其议价能力很弱,关于购买者的议价能力方面,线上商城的购买者大都是其注册用户,而且,购买者与卖方交流的途径具有局限性,另外,线上商城的大部分商品销售都是定价模式,所以,购买者的议价空间很小,即使这样,线上商城还是需要面临新进入者的威胁,毕竟现在电子商务和网络营销发展的那么快,未来会不会有更多甚至更好的类似行业进入也说不准,所以,线上商城还是需要做好应对新入者威胁的准备,不过,以目前的现状来看,新入者要做到典型线上商城一样获得自己物流的动态和模式存在一定的困难,特别是耗资方面,作为同种类型商城的代替品,我认为新入者店铺是威胁最严重的,通过比较新入者和旧者我们发现,不管是商品销售类型还是网站版面设计,甚至物流模式方面两者都是极其相似的,而且,近段时间以来,新入者大规模的进行品牌和信誉建设,所以,在未来对线上商城产生替代作用不是不可能,我国b2c行业发展迅猛,各类购物网站迅速崛起,可是,随是同一行业,竞争强度却并不相同,竞争力的强弱和该企业所制定的营销模式以及对市场反应的敏感程度息息相关,所以,作为b2c行业代表的线上商城应该认识到该行业所面临的现状并及时作出调整和反映来维持行业的竞争优势!1.2系统开发的背景目前线上商城的存在极大的给人们提供了便利,不过大部分店铺都是挂在寄售平台进行寄售的,所有的数据都会到平台库,由平台掌控着一切,店铺能管理的只有自己的商品以及即将推出的活动之类的,后台可查询到所有的商品信息以及售出信息。而此球鞋商城只负责本店铺所有的商品以及后台管理,所有都由自己内部人员负责,一个是可以保证数据的安全性,另一个可以方便做数据分析,不需要通过平台人员进行三方托付。目前Pythonweb在国内正处于发展阶段,为了贴合市场以及提升自己的专业水平,所以采用Python来作为主要的开发语言。系统采用Django+前端js+数据库等技术,Django是Pythonweb中热门度比较高的框架,他的适用性比较的广泛,并且在他的里面集成了各式各样的三方配置,使用的话只需要调出即可,无需安装第三方库。MySQL作为数据库的代表,也是市场使用率最高的数据库,他的安装容易,使用方式也比较的简单,大部分的市场需求都能够被满足。前端采用最基本的html加js来组成,一方面是为了提高前端的知识水平,另一方面是更能提高自己的基础水平。1.3论文的主要工作对于现有的线上商城系统,采用的大多是集成型,由用户开通权限后自由创建店铺;还有些是专卖型,只有自身的一家店铺,本设计就是采用该模式,由设计者创建唯一管理员,所有的后台数据只能由该管理员进行管控。本文主要讲解了该系统的所有功能以及使用方式,详细讲解了所有使用到的技术,数据库设计方式和功能详细设计。系统采用Django+前端JS+数据库等技术,前端不是用HTML5来进行前端静态生成,而是用Django自带的模板语言来生成,运用Django模板语言除了语法的差别,页面形成也是有很大的区别,模板语言中有后端循环、选择等语句,有自己的语法形式,还有类中所有的继承,不过这种继承并不属于数据或变量,而是属于页面,每个页面都可以继承上一个选择继承页面,继承后的页面不需要写基本的HTML形式,只需要在父页面中的挖坑点填写只属于自己的语句即可。当然,子页面也可以选择继承父页面坑点中的内容,也可以选择不继承,不继承的话就只有格式和父页面相同。数据库采用MySQL和Redis两种数据库,一种是关系型数据库,一种是非关系型数据库,两种的使用方式和区别在下文中有介绍,暂不介绍。主体语言为Python,Python作为一种新型的后端语言,所用之处极广,目前后端、爬虫、机器学习等领域都有不错的效果。本系统的所有数据都是使用Python来做爬虫,基本爬虫模块是使用requests来实现,实现方式为调用requests库来执行爬虫。第2章项目技术的概述2.1前端技术简介在本次设计中,前端技术一共用到三种技术,分别为HTML,CSS和JS,主要使用的是HTML和JS,HTML和CSS负责静态页面,JS负责动态页面。HTML是超文本标记语言,它提供了许多标签通过浏览器展现出来。其中涵盖图片链接a标签、img标签、视频video标签和音乐audio标签等等,所以说它是一种标记语言。它的特点是可移植性高,也就说它跨平台,不管在什么平台上,只要有浏览器就行。它主要构建web页面整体的网页结构。CSS是层叠样式表,是一种用来配合HTML来使用的样式表。它主要是帮助HTML构造一个美丽的前端静态页面,其中包括对前端页面的布局、网页的背景和颜色、字体大小和样式等。Bootstrap就是用CSS封装好的样式库,它为HTML提供了丰富的样式,更好的渲染和美化网页。JS全名为JavaScript,是一种配合HTML/CSS使用的脚本语言,主要用于Web网页的动态效果。其中包括一些及时响应事件、前后端交互的Ajax和一些前端的逻辑处理。jQuery就是用JavaScript封装好的简单的库,简化了JavaScript对DOM的API操作和解决浏览器的兼容问题。2.2数据库简介数据库,顾名思义就是存储数据的位置。但数据库也分为很多种,有各自不同的存储形式,有硬盘型永久存储数据的,也有内存级暂时缓存数据的。Mysql和Redis就是两种不同的数据库,Mysql为硬盘级,而Redis则为内存级。硬盘和内存的区别还是很明显的,像Mysql那种就是可以永久保留数据,而且它的数据容量也很大,毕竟现流社会中购买一块容量比较大的硬盘还是很便宜的,远远不及内存条的价格。Redis是一种内存级数据库,它的容量就可能远没有Mysql的容量大,但内存相对于硬盘的优点也是很明显的,那就是它的速度很快,所以一般像缓存那种就是用Redis来做的,毕竟它的速度还是很可观的。数据库如果按是否为关系型分类的话,分为两大类,一类就是关系型数据库,另一类就是非关系型数据库,关系型数据库中最突出的代表就是MySQL,SQLserver等,而另一种非关系型数据库中,我认为最突出的两种就是Redis和MongDB,Redis通常用作缓存,而MongDB虽然也可以用作缓存,但它的存储空间比Redis要大得多,所以MongDB一般是用作长文本的存储,因为是内存级数据库,读取数据的速度自然没得说,而且它的存储量也是较大,日后感觉会替代掉MySQL等关系型数据库。MySQL是瑞典MySQLAB公司研发的一种小型关系型数据库管理系统,但因为瑞典MySQLAB公司内部的一些原因,目前MySQL是被甲骨文所收购。MySQL是目前市场上最流行的关系型数据库之一,不论在任何方面,都有它的一席之地。Redis相较于和MySQL数据库不同的另一种存在,它是用ANSIC码编写的一种内存级数据库,它的主要优点是开源、可基于内存亦可持久化、数据采用K-V型,并且它提供多种开发语言的API接口。Redis在目前的市场上一般都是用作缓存、排行榜等功能途径的开发。2.3Django简介Django是一个重量型的开源框架不同于Flask,Django框架给开发者预置了很多功能,替开发者做了很多的选择,很多常用的,甚至不常用的它都内置了,只要用户想用,都可以直接使用。比如Django拥有完善的模板机制、ORM机制等功能。Django模板机制包含模板继承和页面点语法,模板继承和点语法借鉴对象的继承和方法的调用的形式,方便开发人员的开发,但是它只适用于Web全栈开发,不适用于前后端分离。ORM机制称对象关系映射机制,它帮助Python开发人员灵活使用数据模型,并且Django提供了丰富的API可以动态访问数据库,Django中的ORM就相当于把数据库中的所有对象关系都封装成了一个类,极大的简便了开发人员需要手写SQL语句的麻烦,减轻了很大的工作量,但也因此,如果说想要极大程度上改善SQL语句的性能,那么还是需要手动对SQL语句进行性能优化,当然,如果技术到位,也可以直接修改Django底层代码。这样优化的代码在下次的代码编写中也可以直接引用。并且Django还支持MySQL、Oracle、PostgreSQL等数据库。Django可以快速设计和开发具有MTV层次的Web应用。M表示Modle层,主要是跟数据库进行数据操作;T表示Templates层,主要是对前端页面的渲染。V表示View层,即视图函数层,主要是进行一些逻辑处理2.3服务器简介本次设计使用的服务器为联合使用,采用Nginx+uWSGI,外层采用Nginx,内层采用uWSGI进行代理,uWSGI本身是采用进程+协程来实现的,所以在效率方面比Django本身的服务器性能好太多,所以采用uWSGI来布置服务器。Nginx较对于Django本身自带的服务器而言,它比Django轻量,并且性能比它好,Nginx支持反向代理,而且它是开源的,占用的内存相对而言也是比较少的,抗并发的能力也比较强。本系统主要采用Nginx的动静结合。动态加载主要是负责代理uWSGI服务器。uWSGI,它主要负责实现WSGI、uwsgi、Http等协议。Nginx主要就是用HttpUwsgiModule来与uWSGI服务进行数据交换。WSGI是一种服务网关,它是服务器与Web应用通信的一种规范。

第3章系统设计3.1系统开发及技术背景最近几年,由于网络的迅速发展,网上商城已经成为了目前的主流行业,主打着方便、快捷的服务闯入了人们的生活中,所以我才会选择以线上商城作为主题来做该系统。近几年来,软件行业融入了很多新技术,例如Python、GO,但这些新的技术还处于发展期,技术并不是那么成熟。由于近年来人工智能方向科技的爆发,人们在新技术中的着重点都压在了Python上,正因为Python的语法简单,易读,而且特别适合刚接触编程行业的人去学习,所以在近两年都受到了很大的关注。另一方面Python也是目前最为流行的脚本语言,Python脚本就类似于“万金油”一般,不管在什么方面都会有所存在,甚至于有的其他语言的设计师觉得其他语言设计出来的模块性能并不是很好,那他就可能会用其他语言来设计,而首选的其他语言必然是Python。近几年Python爬虫也是非常火爆的职业,目前主流的爬虫语言为Python和Java,而因为Python的语法简单,代码量比Java的代码量少之又少,所以大多数的公司首选还是用Python来进行爬虫操作。数据库方面,因为目前市场上流行的数据库多种多样,多而杂,但如果按是否为关系型分的话主分要分为两大类,一类是关系型数据库,一类是非关系型数据库,关系型数据库中最流行的可能就是MySQL、SQLserver等,而非关系型数据库中最流行的就是Redis,Mongdb等,两类数据库虽然都可以存储数据,但是他们的存储形式以及操作方式是大有不同的。关系型数据库就是我们常见的那种分库分表,每个表中设计字段,设计字段类型,允许多表连接,每个表中的数据看起来都是规规整整的。而非关系型数据库则如表面意思一样,它的内部不存在多表连接,它有自己建立自己的表,它是没有库的,每个表中的数据就如同表格一样,没有规定的类型,也没有相对应的关系。所以这两种数据库的作用也是不同的,关系型数据库通常用于存储大型数据,因为它的主体就是存放于硬盘当中,所以说它可以包含的数据量是很大的,但正因为是直接存储在硬盘当中,所以它的存取速度是相对而言较慢的,这样就需要对它的性能进行测试,这就导致后来有了专门在数据库方面做测试的设计师,主要做的就是对SQL语句的测试以及数据库性能方面的测试,所以说关系型数据库主要的并不在于数据的存储,而在于一个系统调用数据库的快慢,调用的性能差距直接就能影响客户的体验,甚至加载一段数据的时候能加载十几分钟。后来就有了非关系型数据库,非关系型数据库的出现就是为了解决关系型数据库读取数据太慢的原因。非关系型数据库和关系型数据库的存储方式是不同的,关系型数据库是将数据直接存储至硬盘中,而非关系型数据库则是将数据存储在内存中,硬盘和内存的两种存储方式,在目前的主流技术中,硬盘有机械硬盘和固态硬盘两种,固态硬盘的数据读取速度是比机械硬盘高的,而内存和硬盘的主要区别,就算通过价格来判定也是可以判定的出来的,内存存储数据量不算很多,虽然现在科技在不断进步,但相较于硬盘而言,内存的存储量是远低于硬盘的。硬盘的主要特点就是存储量大,性价比高,这就导致了关系型数据库和非关系型数据库两者的数据读取速度以及存储量的巨大差异。关系型数据库通常是用来做需要做永久保存的数据存储,而非关系型数据库通常就是用作缓存,或者做排行榜功能,Redis在做排行榜方面是非常出色的,将用户最常访问的数据备份在非关系型数据库中,这样客户每次访问数据时就不需要再调用关系型数据库,只需要在非关系型数据库中调用用作缓存的即可。但缓存的存在也引来了很多的问题,例如缓存穿透、直接越过缓存访问数据库导致数据加载问题等,缓存数据量的过多同样也是不可或缺的问题,所以后来为了数据库方面的安全,也是有了非关系型数据库的“分库分表”,但此“分库分表”是和关系型数据库的分库分表不一样,它是用多台非关系型数据库同时做缓存,并且他们都有各自的路由,是存在于网络中的,只不过可能做了代理,所以说外网看不见这些数据库的实质存在。“分库分表”操作就是将超过界限的数据分配到另一个数据库中并留作一行作为标志行,但此操作只是将非关系型的数据量做了提升,但非关系型数据库的性能却因此有了下降,所以后来又研发了一种改进的方法——路由分配,对每个用户的ID或IP进行筛选,可以对ID或IP进行除法操作,除的基数可以为数据库的数量,也可以是自己设定的值。这样形成的结果就是划定多少个用户的缓存存在于一个非关系型数据库中,等需要读取的时候也是通过划分的结果,直接到数据库中去调用即可。这样即保证了非关系型数据库原有的读取速度,也保证了在数据量极大的时候数据库也有足够的空间去存储。非关系型数据库中还有一种最常见的黑客攻击,那就是缓存穿透,缓存穿透的原理很简单,就是通过一直访问缓存中所不存在的数据,因为缓存中存放的数据类型是一种键值对的数据,正常而言,当访问到缓存所不存在的健值时,都会直接到关系型数据库中直接调取数据,那样,缓存穿透的攻击即有了可实行的机会,通过爬虫或一些执行代码一直不停的访问那个不存在的缓存,正因为不存在,所以系统就会直接跳过缓存层,访问数据层,但一直不停的访问数据层,这对数据层的压力是非常大的,如果是处于系统的高峰值,那么极有可能产生系统宕机,那样造成的损失是特别惨重的,所以就需要对缓存穿透这种攻击方式进行抵御。抵御的方式无非于两种,在缓存访问不到的情况下,访问数据层,数据层也访问不到或者已经访问到了数据,那么即刻添加至缓存中,即使在数据层没有访问到数据,也要将结果添加至缓存中,那么就可以有效地抵制缓存穿透攻击。在框架方面,我选择的是Django框架,目前市场所存在的Python框架有很多,但最为主流的有三种,分为Django、Flask和Tornado,Tornado在最新版本中因为撤除了多协程,导致Tornado的执行速度大幅度下降,所以Tornado的使用也是变得少之又少,在使用中的也是用的之前的版本。Flask和Django是目前Python框架的两巨头,Django框架是把所有的功能都已经封装好,只要用户想要使用就可以直接使用,而Flask框架则是只提供一个核心代码,如果想要其他的功能,就需要去社区中心进行下载,也可以自己编写,总结而言就是Django框架里面的功能比较全面,而Flask框架就是扩展性较高,可根据自己的需求自由更改底层代码。3.2需求分析线上商城主要分为两种,一种为集成型,里面包含了各种商家信息,例如淘宝,京东;还有一种是为客户单独设计的网站,网站即商铺,里面所有的商品全是由商铺自行上传,种类分明,设计起来也是很清晰的。该项目属于客户单独设计,所有商品都是由客户自己提供,自己为店铺做数据处理。模块分别有七个部分组成,分别是:主页模块、详情信息模块、登录页面模块、注册信息模块、个人用户信息模块、购物车订单模块、用户支付模块。业务流程图如图3-1所示。图3-1业务流程图本系统主要实现的功能是用户自由购买商品,商家只需要管理商品库存以及订单处理即可。根据这个系统所要实现的目的和任务,总结出这个系统最终所要实现的功能需求如下:1.登录模块此功能为用户登录,通过账号密码以及验证码进行登录,确保操作者是本人,防止恶意登录。已经登录的用户,系统会将用户ID进行session保存,在访问用户个人模块时会对用户ID进行检测,确保用户信息安全。2.注册模块此功能为新用户准备,用户通过此接口为自己建立一个新的账号密码来为以后使用。注册时需要提供数据库中所不存在的用户名;密码必须确保为六位以上,再次输入密码栏是为了确保用户能够记住。3.首页模块此功能为新用户准备,用户通过此接口为自己建立一个新的账号密码来为以后使用。注册时需要提供数据库中所不存在的用户名;密码必须确保为六位以上,再次输入密码栏是为了确保用户能够记住。4.详情模块此功能为新用户准备,用户通过此接口为自己建立一个新的账号密码来为以后使用。注册时需要提供数据库中所不存在的用户名;密码必须确保为六位以上,再次输入密码栏是为了确保用户能够记住。5.个人信息模块此模块展示了用户的所有信息,用户可通过该页面修改自己的信息。6.购物车模块此模块为用户的添加购物的模块,对于用户添加到购物车中的商品信息进行展示。7.支付模块此模块为接口模块,调用的是支付宝的支付接口,通过回调数据来确认用户有无付款。

第4章系统设计4.1系统设计原则1.安全性原则用户的所有信息都必须在安全上加以保障,若用户的地址或者电话泄露,会造成很多不必要的麻烦,所以这就要在很多安全方面加以考虑,最基础的就是对登录密码进行加密,这样即使是管理员也无法得知用户密码;接着就是用用户ID对每个不同的用户进行隔离。2.可扩充性原则随着用户的日益增加,所有的功能模块都需要有一定的扩充能力,方便日后的修改以及扩充。众所周知,项目二次开发是比较正常的,所以为了满足二次开发,每个模块都填上说明或编写开发说明,讲解每个模块的功能和作用来方便以后开发。3.提高用户体验所有的电商项目都是以用户为一切的中心,用户体验最大,所以一切必须以用户怎么操作最舒服怎么来。4.具有完整的系统接口日后可能会有越来越多的功能加入,所以为了保证系统的完整性,对外可以提供完整的系统接口,确保日后即使添加的功能有些许的问题,但最主要的系统是不可能出现问题的。4.2数据库设计数据库设计分为两个设计,一个为表结构的设计,还有一个为字段设计。表结构设计有两种,一种是数据库引擎,还有一种是表与表的关系。数据库引擎通常有Innodb和Myisam两种,根据需求自由选择。而表于表的关系主要有三种,分为一对一、一对多和多对多。表中字段的关系主要就是逻辑关系,表中有主键等关键字,这些关键字主要就是用到表和表的关系连接中的。表中的字段有自己所特有的属性,每个字段都有自己所特有的意义,不可替代。本项目主要是以用户为中心展开表的设计。用户表和商品表为多对多关系,顺之产生第三张表为购物车表。用户表和订单表之间为一对多关系。用户表和地址表也是一对多关系。订单表和订单地址表为一对一关系。订单表和订单商品为一对多关系[3]。下面是数据库各模块表关系和表字段设计。本项目中主要表之间的E-R关系如图4-1所示。图4-1项目主要表E-R关系图首页模块表结构设计首页模块轮播表首页展示的轮播表,最主要就是为轮播提供数据,若想要修改轮播数据,直接在该表中修改即可,如表4-1所示。表4-1首页模块轮播表字段类型长度备注idinteger主键自增长titlechar50标题image_urlimage图片路径date_publishdatetime发布时间indexinteger排列顺序首页模块主要商品表首页商品数据表,为首页提供展示商品,是除轮播之外的普通数据展示,如表4-2所示。表4-2首页模块主要商品表字段类型长度备注idinteger主键自增长categorychar256分类外键namechar30名称brandchar256品牌外键sizeChar256尺寸外键old_pricefloat原价new_pricefloat现价discountfloat折扣descchar100简介salesinteger销量tagchar256标签外键numinteger库存image_url_iimage展示图片路径image_url_limage详情图片路径image_url_mimage详情图片路径2image_url_rimage详情图片路径3image_url_cimage购物车展示图片详情模块表结构设计商品分类表所有的商品数据都在其中,如表4-3所示。表4-3商品分类表字段类型长度备注idinteger主键自增长typchar20所属大类namechar30分类名称indexinteger分类的排序sexinteger性别商品品牌表商品品牌表,提供了所有的商品品牌,如表4-4所示。表4-4商品分类表字段类型长度备注idinteger主键自增长namechar30品牌名称indexinteger64排列顺序商品尺寸表商品尺寸表,提供了所有的商品尺寸,如表4-5所示。表4-5商品分类表字段类型长度备注idinteger主键自增长namechar30尺寸indexinteger64排列顺序商品标签表商品标签表,提供了所有的商品标签,如表4-6所示。表4-6商品标签表字段类型长度备注idinteger主键自增长namechar30标签购物车模块表结构设计购物车中的数据表,是用户存放在购物车中的数据,如表4-7所示。表4-7购物车商品表字段类型长度备注idinteger主键自增长clothingchar购物车中产品条目quantityinteger数量sum_pricefloat小计用户表结构设计用户表,记录了用户所有的登录信息,如表4-8所示。表4-8用户表字段类型长度备注idinteger主键自增长qqchar20关联qqmobilechar11用户手机号usernamechar256用户名emailchar256用户邮箱passwordchar256用户密码

第5章系统详细设计与实现本次系统分为首页模块、详情模块、登录模块、注册模块、个人信息模块、购物车模块、支付模块七个子模块,每个模块之前都可进行互调,以保证数据的完整性。5.1首页模块首页模块是一个网上购物必需的功能之一,因为用户进入App中,第一下展示的就是首页模块的页面。首页模块页面可以说是该项目中的“脸面”,也是用户访问量最多的页面,所以往往一个好的网站都有一个很好的首页展示。首页模块主要包含了轮播图、导航、必购商品和主要展示。轮播图主要利用前端swiper框架来实现,这类主要是商家做一些广告宣传的。导航是一些销量比较排前的商品推荐给用户。必购商品是人们生活必需品,方便用户选择。主要展示是商品的分类,根据用户喜爱来选择,如图5-1所示。因为首页需要进行的数据操作很少,所以只展示前端的模板代码,主要代码如下:{%extends'base.html'%}#继承base_main.html{%loadstaticfiles%} #读取继承文件中的staticfiles块{%blockbanner_block%} #填补继承文件中的banner_block块{%include'ad.html'%} #读取ad.html文件{%endblock%}{%blockcontent_block%}<divclass="content"><divclass="container"><divclass="content-top"><h1>最新商品</h1><divclass="content-top1">{%forcloinclo_list%}<formaction="{%url'add_cart'%}"method="post"id="subform{{clo.id}}">{%csrf_token%}<divclass="col-md-3col-md2"><divclass="col-md1simpleCart_shelfItem"><ahref="{%url'detail'%}?did={{clo.id}}"><imgclass="img-responsive"src="{{MEDIA_URL}}{{clo.image_url_i}}"alt=""/></a><h3><ahref="{%url'detail'%}?did={{clo.id}}">{{}}</a></h3><divclass="price"><h5class="item_price">{{clo.new_price}}元</h5><inputtype="hidden"name="chid"value="{{clo.id}}"><ahref="{%url'detail'%}?did={{clo.id}}">details>></a><divclass="clearfix"></div></div></div></div></form>{%endfor%}<divclass="clearfix"></div></div></div>{%include'pagination.html'%}</div></div>{%endblock%}defgetPage(request,clo_list):paginator=Paginator(clo_list,8)try:page=int(request.GET.get('page',1))clo_list=paginator.page(page)except(EmptyPage,InvalidPage,PageNotAnInteger):clo_list=paginator.page(1)returnclo_listdefgetDiscount(request):try:clo_list=Clothing.objects.filter(new_price__lt=F('old_price'))clo_list=getPage(request,clo_list)logger.debug("lenclo_list:%d",len(clo_list))discount=TrueexceptExceptionase:logger.error(e)returnrender(request,'products.html',locals())图5-1首页展示5.2详情模块详情模块是为了更加完整的展示商品的信息,以供客户进行最完整的选择。详情模块主要包含了球鞋商品详细内容以及将其加入购物车的操作。通过根据了解其详细的商品参数来达到选择最合适的商品。只有在用户已登录的情况下才可将其商品加入购物车;若顾客未登录状态下无法加购会跳转至网站登录页面,只有在登录成功的情况下才可将商品加入用户的购物车,如图5-2所示。主要代码如下:defdetail(request):try:did=request.GET.get('did',None)try:clo=Clothing.objects.get(pk=did)exceptClothing.DoesNotExist:returnrender(request,'error.html',{"reason":"商品不存在"})exceptExceptionase:logger.error(e)returnrender(request,'single.html',locals())图5-2详情页面展示5.3注册模块用户登录是电商产品的必需功能之一,用户想要使用App购物就必须有一个自己的账号,从而才可以在网上购买自己满意的商品。注册账号是必不可少的一步。注册模块主要包含两个功能分别为用户的注册和邮箱激活账号。用户注册是指用户在注册时App后台需要用户输入个人的基本信息,其中包括用户名称,密码以及确认密码,用户的邮箱以及用户头像等,如果用户名称已经被注册或者用户输入的信息格式不正确系统将向用户显示相应错误的提示信息,使其修改注册内容,在注册完以后,即可进行登录,如图5-3所示。主要代码:defdo_reg(request):try:ifrequest.method=='POST':reg_form=RegForm(request.POST)ifreg_form.is_valid():user=User.objects.create(username=reg_form.cleaned_data["username"],email=reg_form.cleaned_data["email"],password=make_password(reg_form.cleaned_data["password"]),)user.save()user.backend='django.contrib.auth.backends.ModelBackend'login(request,user)returnredirect(request.POST.get('source_url'))else:returnrender(request,'error.html',{'reason':reg_form.errors})else:reg_form=RegForm()exceptExceptionase:logger.error(e)returnrender(request,'register.html',locals())图5-3注册页面5.4登录模块登录是使用刚刚注册的账户登录到App,根据登录页面的提示输入相应的信息,比如用户名和密码。输入完之后,系统将验证用户帐户和密码是否正确,如果验证正确,就会跳转到我的模块页面。如果验证错误,提示相关错误。登录模块主要包含用户名和密码的验证以及验证码的验证。用户名和密码的验证是指用户注册的用户名和密码是否与登录时的用户名和密码一致,或则是指数据库中是否有该用户名和密码。验证码主要用于防止一些爬虫爬取商品信息,如图5-4所示。主要代码如下:defdo_login(request):try:ifrequest.method=='POST':login_form=LoginForm(request.POST)iflogin_form.is_valid():username=login_form.cleaned_data["username"]password=login_form.cleaned_data["password"]user=authenticate(username=username,password=password)ifuserisnotNone:user.backend='django.contrib.auth.backends.ModelBackend'#指定默认的登录验证方式login(request,user)else:returnrender(request,'error.html',{'reason':'登录验证失败'})returnredirect(request.POST.get('source_url'))else:returnrender(request,'error.html',{'reason':login_form.errors})else:login_form=LoginForm()exceptExceptionase:logger.error(e)returnrender(request,'login.html',locals())#退出defdo_logout(request):try:logout(request)exceptExceptionase:logger.error(e)login_form=LoginForm()returnrender(request,'login.html',locals())图5-4登录页面5.5购物车模块购物车模块是网上购物的主要功能之一,用户一次购物的商品都是在购物车中。购物车模块也是App的最重要的环节,用户商品的选择和下单都跟购物车有关系。购物车模块包含下单用户的详细信息、加入购物车商品的展示、商品的选中和付款总价。下单用户的详细信息包含收货人、电话号码、收货地址和送达时间,方便商家发货。购物车商品展示主要是商品的数量和单价。商品的选中和付款总价是指购物车中哪些商品现在购买以及购买的付款总价,如图5-5所示。主要代码:#查看购物车@authenticated_viewdefview_cart(request):cart=request.session.get(request.user.id,None)returnrender(request,'checkout.html',locals())#添加购物车@authenticated_viewdefadd_cart(request):try:chid=request.POST.get('chid',None)print(chid)try:clothing=Clothing.objects.get(pk=chid)exceptClothing.DoesNotExist:returnrender(request,'error.html',{'reason':'商品不存在'})cart=request.session.get(request.user.id,None)ifnotcart:cart=Cart()cart.add(clothing)request.session[request.user.id]=cartelse:cart.add(clothing)request.session[request.user.id]=cartexceptExceptionase:logger.error(e)returnrender(request,'checkout.html',locals())#清空购物车@authenticated_viewdefcleanCart(request):flag=request.GET.get('flag',None)ifflag:cart=Cart()request.session[request.user.id]=cartreturnrender(request,'checkout_ok.html',locals())else:cart=Cart()request.session[request.user.id]=cartreturnrender(request,'checkout.html',locals())@authenticated_viewdefclean_one_item(request,id):item=Nonetry:item=Clothing.objects.get(pk=id)exceptClothing.DoesNotExist:passifitem:item.delete()cart=request.session.get(request.user.id,None)returnrender(request,'checkout.html',{'cart':cart})图5-5购物车页面5.6后台管理模块后台管理模块采用的是Django的admin模块,他是集成于Django框架之中的,我们只需要通过命令行来创建管理员账号,然后通过网页跳至后台页面,输入管理员账号密码,他就会把所有已注册的数据库以图中形式展示,管理员可以将数据库中的每一项数据进行添加、修改以及删除等,如图5-6所示。图5-6后台管理页面5.6.1添加用户信息此页面实现管理员对用户信息添加管理,添加内容包括用户名、密码、邮箱、注册时间、手机号码等等,已被注册过得用户名无法注册。其中登录名、密码等不为空,密码、邮箱等格式验证。添加用户信息界面如图5-7所示。图5-7添加用户页面5.6.2用户管理此页面以列表的形式显示用户,可查看用户信息列表,可以进行查看、编辑、删除等操作,如图5-8所示。图5-8用户管理5.6.3添加商品信息此页面实现管理员对商品信息添加管理,添加内容包括品牌分类、商品名称,商品名称、尺寸尺码、价格折扣以及商品简介和销量等进行添加。添加商品信息界面如图5-9所示。图5-9添加商品页面5.6.4商品管理此页面以列表的形式显示用户,可查看商品信息列表,可以进行查看、编辑、删除等操作,如图5-10所示。图5-10商品管理页面

第6章系统测试6.1登录功能测试登录界面是系统的入口,在整个系统中的地位是非常重要的。进入登录界面后,用户可以输入自己的账号用户名、密码进行登录,以便进行下一步的操作,测试情况如表6-1所示。表6-1登录测试测试内容用户登录功能输入数据1.用户名或密码为空2.用户名或密码错误3.用户名和密码正确预期输出1.无法登录2.无法登录3.登录成功实际输出1.无法登录2.无法登录3.登录成功测试结论通过用户登录成功后,登录界面切换,如图6-1所示。图6-1登录成功6.2注册功能测试注册成为会员后才能享有网站的所有用户功能,并且每个会员的登录名唯一,便于管理员管理,测试情况如表6-2所示。表6-2注册测试测试内容用户注册功能输入数据登录名或密码为空2.登录名已存在3.密码或邮箱格式不正确4.确认密码两次不一致预期输出1.提示完善信息2.提示改名3.提示修正格式4.注册成功实际输出1.提示完善信息2.提示改名3.提示修正格式4.注册成功测试结论通过注册成功后,直接跳转登录页面,如图6-2所示。图6-2注册成功6.3用户功能测试商品加入购物车测试,测试情况如表6-3所示。表6-3加入购物车测试测试内容商品加入购物车输入操作1.商品未加入购物车2.商品已加入购物车3.清空购物车预期输出1.无法结算2成功结算3.成功清空实际输出1.无法结算2成功结算3.成功清空测试结论通过商品成功加入购物车,如图6-3所示。图6-3加入购物车6.4商品订单测试测试情况如表6-4所示。表6-4商品订单结算测试测试内容商品订单结算输入操作1.订单未支付2.订单已支付3.确认收货预期输出1.无法完成2成功发货3.订单已完成实际输出1.无法完成2成功发货3.订单已完成测试结论通过商品订单已完成,如图6-4所示。图6-4商品订单6.5管理员功能测试用户管理功能测试,测试情况如表6-5所示。表6-5用户管理测试测试内容用添加、编辑、查询、修改功能输入操作1.按要求输入添加用户信息2.在管理用户列表中,管理员可以查询、编辑和修改信息预期输出1.添加成功2.操作成功实际输出1.添加成功2.操作成功测试结论通过用户管理测试已完成,如图6-5所示。图6-5用户管理6.6测试总结经过对上述的测试结果分析,本系统基本满足了球鞋线上商城的需求。所有基本功能齐全,操作简单,产品运行性能良好,是一个实用性、综合性较强的线上商城系统。

总结通过本次毕业论文的设计,不仅将大学四年里面学到的知识融会贯通,还帮助我意识到了自己的不足。从最初的毕业论文选题,到网上查看文档,整理接口参数,再到论文代码的完成与实现和最后的论文定稿,这个过程让我体会到了理论和实践相结合的难度,也让我了解了只有自己亲身经历这个过程才能使其印象深刻。本次毕业论文的设计与实现中对于系统的优缺点做了以下总结,对于遇到许多问题也及时进行了完善和修改,首先本系统的优点以方便快捷简洁明了为主,用户登录本系统可以快速通过产品分类以及商品的发售时间和销量热度来第一时间找到自己想要的球鞋,通过球鞋的详情页面及时的了解本款球鞋的详情信息包括各个角度的图片展示以及球鞋的详细介绍使得用户对此有一个全面的了解来获得他们想要的商品,在商品结算的过程中也没有多余的繁琐流程,在用户加入购物车结算以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论