基于RESTful的校园二手商品交易系统的设计与实现

时间:2018-08-02 编辑整理:白忠军 孔广黔 吴云 来源:早发表网

摘要:针对传统校园二手商品交易的不足,结合高校特定区域的优势以及RESTful架构风格的特性,提出基于RESTful的校园二手商品交易系统。对系统进行总体架构、功能模块、数据库以及RESTfulAPI设计,运用Python语言、ORM技术以及Flask框架,实现了系统的商品发布、商品分类展示、商品搜索、商品交易等主要功能。实际测试与应用结果表明,该系统运行比较稳定,具有较强的扩展性,能够较好地满足大学生进行闲置物品交易的需求。

关键词:校园二手商品RESTfulPython语言ORM技术Flask框架

0  引言

随着学生购买能力的提高以及每年升学和毕业,在大学校园里存在着各种各样的二手物品。这些物品食之无味,弃之可惜,于是出现了校园二手商品买卖,从张贴小广告到沿路摆摊设点,这种经营方式不但破坏校园的环境卫生,而且不能满足校园二手商品畅通交易。随着近年来因特网在高校的迅速普及,加之二手商品交易需求的日益增长,各大高校纷纷建立起自已的二手商品交易平台,其开发技术由本地服务发展到网络服务(Web Service)。

Web Service的本质是通过网络调用其他网站的资源,与本地服务相比,它具有平台无关性、跨越防火墙以及编程语言无关性等优势。WebService的两种主要方式是SOAP(英文全称:Simple Object Access Protocol)和RESTful(英文全称:Representational State Transfer),SOAP是一种基于XML的数据交换协议规范;RESTful是一种软件架构风格,提供了设计原则和约束条件。与SOAP相比,RESTful有三个重要特性:一是充分利用HTTP协议本身语义,规范了请求动作的使用;二是暴露资源存在,URI透明地显示了请求的资源;三是无状态性,不用考虑上下文以及当前状态,极大的降低了复杂度。

针对传统校园二手商品交易的不足,以及RESTful的特性,提出基于RESTful的校园二手商品交易系统,充分利用网络设备资源,对高校的二手商品交易市场进行系统管理,创建节约型校园。

1  相关技术介绍

本系统基于RESTfu API设计风格进行API设计,同时运用Python语言以及ORMFlask等技术,实现了系统功能。

1)RESTfulAPI:API是系统前后端交互数据的接口,RESTful API设计风格一般满足三个约束:第一,把网络上的所有事物抽象成资源,每一个资源都有唯一的资源标识符URI;第二,RESTful使用的是标准的HTTP方法,常用的有四种方法:GET(获取资源)、POST(新建资源)、PUT(更新资源)、DELETE(删除资源);第三,系统前后端进行数据传输一般采用JSON格式。

2)Python语言:Python是一种面向对象的解释型语言,具有丰富和强大的库,常被称作胶水语言,它具有免费开源、可移植性、运行速度快等特性。

3)ORM技术:对象关系映射(Object Relation Mapping,简称ORM)是指在操纵数据库表的时候,不需要用复杂的SQL语句,而是简单的操作实体对象的属性和方法。ORM的一个重要目标是提供能兼容众多数据库(如SQLiteMySQLPostgresOracleMS-SQL以及SQL Server)的企业级持久性模型。

4)Flask框架:Flask是一个使用Python语言编写的轻量级Web应用框架,它使用简单的核心,用extension增加其他功能,比如用Flaskextension加入ORM这个功能。

2  系统设计

2.1  总体架构设计

由于考虑到系统的稳定性、安全性及可维护性等特点,本系统采用分层架构开发,分层架构可以使得层与层之间的耦合度尽可能降低,以保证开发过程中不会相互干扰,提高工作效率。如图1所示,系统架构分为数据层(Data Layer)和应用层(Application Layer)。

 

1)数据层:即系统后端,用MySQL数据库存储数据;与数据库交互采用Python第三方库SQLAlchemy对数据库进行增删改查,实现ORM技术;DBmodel是系统创建的所有映射类;后端服务用PythonWeb应用框架Flask;后端的单元测Python第三方库Nose,为前端提供可验证的交付产品。

2)应用层:即系统前端,采用HTML5和CSS3来实现静态页面设计与布局;前端框架用目前很受欢迎的Bootstrap;采用JavaScriptAJAX创建动态页面效果并且与后端进行数据交互。系统前端文件主要分为页面文件(pages)和静态文件(static),其中每个页面有对应的css样式和js交互代码,另外将页面中的图片存放于images文件。

系统前后端数据交互通过RESTfulAPI实现,API将前端请求参数通过AJAX对象发送到系统后端,后端根据API中的URI找到处理函数,进行逻辑处理之后将结果以JSON格式返回给前端。

2.2功能模块设计

本系统主要实现商品管理和用户管理两大功能模块:

1)商品管理:商品管理分为商品发布、商品搜索、商品推荐、商品分类展示、订单处理、购物车等模块。商品发布模块可以输入主题、价格、描述以及上传多张图片;商品搜索模块是通过关键词快速找到用户所需要的商品;商品推荐模块是根据用户的历史数据把商品个性化推荐给用户;商品分类展示模块是在系统主界面,以“最新”、“最热”和“推荐”三个类别把商品展示给用户;订单处理是用户下单后,进行支付的过程;购物车是用户暂时选中的商品列表,可以灵活的删除增加商品,修改商品数量等。

2)用户管理:用户管理分为用户注册、用户登录、找回密码、修改密码等模块。用户注册时采用MD5加密技术对用户密码进行加密,保障用户账号的安全性;用户登录成功的同时系统后端会传给前端一串无规律长字符串“usertoken”,用于保证前后端交互数据的安全性;找回密码模块就是验证密保答案是否一致;修改密码是判断用户输入的原密码是否跟注册时的密码一致。

2.3  数据库设计

数据库设计是整个系统的基础和核心,因此数据库设计的好坏将直接影响到整个系统完成的成败和好坏。本系统的数据库设计分为三个阶段,首先,通过需求分析得到数据项和数据结构以后,设计出能够满足用户需求的各类实体,以及实体与属性之间的关系,系统E-R图如图2所示。

 

其次,根据第一阶段的E-R模型,确定符合关系范式的数据库表如下:

1)会员用户(用户编号,用户姓名,用户密码,密保问题,密保答案)

2)认证表(认证字符串,用户编号)

3)用户信息(信息编号,用户编号,用户手机,用户头像)

4)商品信息(商品编号,商品主题,商品总价,商品描述,商品时间,完成日期,完成状态,用户编号),本系统商品信息表名用“manifest”表示。

5)评论表(评论编号,评论内容,评论日期,用户编号,商品编号)

6)订单表(订单编号,完成日期,下单时间,完成状态,收件人信息,用户编号,商品编号)

7)图片表(图片编号,图片名称,商品编号)

最后,在以上两个阶段的基础上进行数据库的物理结构设计,确定每个数据库表中各个字段的数据类型,解释字段含义,判断字段是否为空,以及主键和外键的确定。

2.4  API设计

根据RESTful API的设计风格以及系统的功能需求,本系统共设计32个API,包括用户注册、用户登录、找回密码、修改密码、商品发布、商品搜索、商品推荐、商品分类展示、订单处理等,每个API都包含路径(URI)、请求方式(POSTGETPUTDELETE)、JSON格式的请求参数和返回值。以“发布商品”这个重要API为例,如图3所示,此API路径是“/v1/manifests/publish/”。请求方式是POST,因为发布商品相当于新建资源。系统前端向后端请求的参数有:“usertoken_str”,这是认证字符串;“manifest_title”,这是商品的名称,不能超过30个字;“manifest_price”,这是商品的价格,“manifest_desp”,这是商品的描述,“manifest_pics”,这是商品的照片,传到后端的格式是列表。后端给前端的返回值有三种情况,一是数据正常交互,即发布成功;二是usertoken_str无效,即登录过期;三是数据库发生错误。

 

3  系统实现

3.1  关键技术的实现

1)ORM技术的实现

本系统后端操作数据库时,从SQLAlchemy的ORM库中导入sessionmaker,用它定义会话类,用会话类的实例对象session进行数据库的增删改查,其对应的四种方法是:add()、delete()、update()和query()。

以“发布商品”功能为例,后端用sessionadd方法向商品信息表中追加数据,其代码为:sessionaddManifestmanifest_useriduseridmanifest_titlemanifest_titlemanifest_pricemanifest_pricemanifest_despmanifest_despmanifest_datetimenowtimemanifest_finish0))。

用户在发布商品页面输入的“manifest_title”为“卖二手电脑显示器”;“manifest_price”为“200”;“manifest_desp”为“电脑显示屏为8成新”;另外说明,“manifest_userid”为当前发布者用户编号;“manifest_datetime”为当前发布时间。用户点击页面的“发布”按钮进行发布商品,此时系统运行终端部分截图如图4所示,由图中第一行可知,session的add方法被转换为标准的SQL插入语句,图中下半部分则为输入的参数值,系统已成功将这些参数值插入到数据库表中,由此可知,不用写复杂的SQL语句也可以操作数据库,这对系统后期的维护和扩展奠定了良好的基础。

 

 

2)RESTfulAPI的实现

本系统在API设计阶段运用了RESTfulAPI设计风格,通过前后端编码实现了32个API,以“发布商品”API为例,其实现过程如下:

首先,当用户触发“发布商品”功能时,系统开始进行API的调用,前端从页面获取请求参数,参数包括商品主题、商品价格、商品描述以及商品图片地址,如图5所示。

 

其次,AJAX创建XMLHttpRequest对象,用对象的opensend方法将请求方式、URI路径以及请求参数发送到后端服务,如图6所示,此API的请求方式是POSTURI路径是“/v1/manifests/publish/”,路径前面是后端服务的IP地址和端口号,状态码200表示前后端数据交互成功。

然后,系统后端运用Flask框架根据API路径执行操作函数,或用SQLAlchemy对数据库进行访问,之后将封装好的返回值传给前端。

 

最后,系统前端AJAX对象判断响应是否已就绪,若已就绪,则接收后端以JSON格式传来的返回值,如图7所示,API响应值中infomsg为发布成功,即API设计时的第一种返回值情况,可参考2.4节的图3

 

3.2  功能模块的实现

根据系统需求、总体架构设计、数据库及API设计,运用Python语言、ORM以及Flask框架,并结合分层架构思想,对系统的功能进行了实现,主要功能包括:注册、登录、主页商品分类展示、商品搜索、评论回复、订单处理、购物车、商品交易以及商品发布等模块,系统主界面如图8所示。

 

由图8可知,在主界面以三个类别把商品展示给用户,根据发布时间排序返回“最新”商品;根据浏览次数排序返回“最热”商品;根据用户历史数据为当前用户返回“推荐”商品。在搜索框里输入想要搜索商品的关键词,即可搜索出与关键词匹配的商品。点击“查看详情”按钮进入商品详情页面,在该页面可以浏览商品图片、用户评论等信息,并且可以将此商品加入购物车。在订单处理页面可以对已选中的商品进行支付,查看订单状态等信息。在页面顶部点击“发布二货”即可发布自己的二手商品,在发布商品界面可以输入主题、价格、商品描述等信息,并且可以上传多张商品图片。本系统的大致实现流程如图9所示。

 

3.3  系统运行结果

本系统在20169月部署到贵州大学校园网上,最初只在贵州大学北校区测试运行,商品总数量和商品交易数量统计结果如图10所示。由于前5个月处于前期推广阶段,交易数量较少,在20173月至6月,本系统得到大力推广,并且处于大学生毕业季,使得二手商品交易数量急剧上升。

 

4  结束语

根据高校大学生的实际需求,对校园二手商品交易系统进行了总体架构设计,数据库设计以及RESTfulAPI设计,运用Python语言、ORM技术以及Flask框架实现了本系统主要功能。目前,通过系统在贵州大学花溪北校区的运营情况,发现商品总数量、商品交易数量以及网站浏览量都在不断上升,商品交易数量平均每天达到210个商品,该网站平均每天有2300多人访问,充分说明了大学校园二手商品交易平台具有强大的发展空间,同时也间接证明了本系统的实用价值和社会价值。


职称
论文

期刊
发表

加急
见刊

写作
咨询

课题
专答

编辑
顾问

关注
我们

返回
顶部