摘要
在全球化的浪潮下,电子商务已成为连接各国市场、促进贸易往来的重要桥梁。特别是在农产品领域,跨境电子商务平台的崛起不仅打破了地域限制,也为农民和消费者提供了前所未有的便利与机遇。在这一背景下,“晋农进商”农产品跨境电子商务平台应运而生,旨在将山西乃至全国的优质农产品推向世界,同时引进国际先进的农业技术和市场理念,实现农业资源的优化配置和高效利用。
“晋农进商”不仅是一个简单的交易平台,更是农业产业升级和国际贸易合作的重要载体。它整合了山西丰富的农业资源,通过现代信息技术手段,实现了农产品的在线展示、交易、物流配送等一站式服务。同时,平台还注重农产品品牌建设和市场推广,帮助农民提升产品附加值,增加收入来源。
未来,“晋农进商”将继续发挥其在农产品跨境贸易中的桥梁和纽带作用,推动农业供给侧结构性改革,促进农业产业升级和国际贸易合作,为农民和消费者创造更多价值。
关键词:Web;Django技术;农产品跨境电子商务平台
"Jinnong Enters Commerce" - a cross-border e-commerce platform for agricultural products
ABSTRACT
In the wave of globalization, e-commerce has become an important bridge connecting markets of various countries and promoting trade exchanges. Especially in the field of agricultural products, the rise of cross-border e-commerce platforms not only breaks geographical restrictions, but also provides unprecedented convenience and opportunities for farmers and consumers. In this context, the "Jin Nong Jin Shang" cross-border e-commerce platform for agricultural products has emerged, aiming to promote high-quality agricultural products from Shanxi and even the whole country to the world, while introducing international advanced agricultural technology and market concepts, and achieving optimal allocation and efficient utilization of agricultural resources.
Jinnong Jinshang is not only a simple trading platform, but also an important carrier for agricultural industry upgrading and international trade cooperation. It integrates Shanxi's rich agricultural resources and achieves one-stop services such as online display, trading, and logistics distribution of agricultural products through modern information technology. At the same time, the platform also focuses on the construction of agricultural product brands and market promotion, helping farmers improve product added value and increase sources of income.
In the future, "Jinnong Jinshang" will continue to play its role as a bridge and link in cross-border trade of agricultural products, promote the structural reform of the agricultural supply side, promote the upgrading of the agricultural industry and international trade cooperation, and create more value for farmers and consumers.
Keywords:Web; Web; Django technology; Cross border e-commerce platform for agricultural products
目 录
1 绪论
“晋农进商”这一农产品跨境电子商务平台的开发,源于对当前全球化和数字化趋势的深刻洞察,以及对农业领域发展需求的精准把握。在全球经济一体化的背景下,跨境电子商务已成为推动农产品贸易增长、优化资源配置、提升农业竞争力的重要途径。特别是对于山西省这样一个农业大省来说,构建一个高效、便捷的农产品跨境电子商务平台,不仅有助于拓宽农产品市场,增加农民收入,还能推动农业产业升级,提升农产品在国际市场上的竞争力。
“晋农进商”的开发,不仅是为了响应国家关于农业现代化的战略部署,更是为了满足广大农民和消费者对优质农产品日益增长的需求。通过这一平台,农民可以将自己的产品直接展示给全球消费者,打破地域限制,实现产销对接。同时,消费者也能以更便捷的方式购买到来自山西乃至全国的优质农产品,享受到更加多样化的购物体验。
此外,“晋农进商”的开发还具有重要的战略意义。它有助于推动山西农业与国际市场的深度融合,引进国外先进的农业技术和市场理念,提升农业整体发展水平。同时,通过平台的数据分析和市场研究功能,还能为政府决策提供有力支持,推动农业供给侧结构性改革,实现农业可持续发展。
综上所述,“晋农进商”农产品跨境电子商务平台的开发,既是顺应时代潮流的必然选择,也是推动农业产业升级和国际贸易合作的重要举措。它的成功运营将为山西省乃至全国的农业发展注入新的活力,为农民和消费者创造更多价值。
1.2国内外研究现状
一、国内研究现状
在中国,农产品跨境电子商务作为农业现代化的重要组成部分,近年来得到了广泛的关注和研究。随着“互联网+”战略的深入实施,越来越多的学者和企业家开始关注农产品跨境电子商务的发展模式、挑战与机遇。
在学术研究方面,国内学者对农产品跨境电子商务的运营模式、市场定位、品牌建设等方面进行了深入研究。同时,政府也出台了一系列政策,鼓励和支持农产品跨境电子商务的发展。这些政策和研究成果为“晋农进商”等农产品跨境电子商务平台的开发提供了理论支撑和实践指导。
在实践应用方面,中国的一些农产品跨境电子商务平台已经取得了显著成效。这些平台通过整合农业资源、优化供应链管理、提高物流配送效率等措施,有效推动了农产品的国际贸易和国内市场拓展。同时,这些平台还注重品牌建设和市场推广,提高了农产品的知名度和竞争力。
二、国外研究现状
在全球范围内,农产品跨境电子商务的发展也呈现出蓬勃的态势。许多国家和地区都在积极探索和实践农产品跨境电子商务的发展模式。
在学术研究方面,国外学者对农产品跨境电子商务的国际贸易规则、物流体系、市场营销等方面进行了深入研究。同时,一些国际组织和机构也积极推动农产品跨境电子商务的发展,分享成功案例和经验教训。
在实践应用方面,一些发达国家和地区的农产品跨境电子商务平台已经相当成熟。这些平台通过先进的信息技术手段、完善的物流体系和市场营销策略,成功地将农产品推向国际市场。同时,这些平台还注重与农户的合作和共赢,实现了农业产业链的协同发展。
综上所述,无论是国内还是国外,农产品跨境电子商务都呈现出蓬勃的发展态势。这为“晋农进商”等农产品跨境电子商务平台的开发提供了宝贵的经验和借鉴。同时,也要求我们在实践中不断创新和完善,以适应全球化和数字化的发展趋势。
1.3论文组成结构
第一章是绪论,本文章的开头部分,对本题目的研究背景和研究意义等一些做文字性的描述。
第二章研究了“晋农进商”—农产品跨境电子商务平台的所采用的开发技术和开发工具。
第三章是系统分析部分,包括系统总体需求描述、功能性角度分析系统需求、非功能性等各个方面分析系统是否可以实现。
第四章是系统设计部分,本文章的重要部分,提供了系统架构的详细设计和一些主要功能模块的设计说明。
第五章是系统的具体实现,介绍系统的各个模块的具体实现。
第六章在前几章的基础上对系统进行测试和运行。
最后对系统进行了认真的总结,以此对未来有一个新的展望。
2.1开发技术说明
本系统前端部分基于MVVM模式进行开发,采用B/S模式,后端部分基于python的Django框架进行开发。
前端部分:前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router和Vuex实现动态路由和全局状态管理,Ajax实现前后端通信,Element UI组件库使页面快速成型,项目前端通过栅格布局实现响应式,可适应PC端、平板端、手机端等不同屏幕大小尺寸的完美布局展示。
后端部分:采用Django作为开发框架,同时集成Redis等相关技术。
2.2操作系统
Windows10和Windows以后的版本关于Windows10,微软宣布它将以比以前更快的节奏更新Windows,将不会有官方的“Windows11”;相反,WindowsUpdate(或另一个服务模型)会将现有的Windows10更新为新版本。在编写此书时,已经有两个这样的更新发生在2015年11月(也称为版本1511,指服务年和月份)和2016年7月(版本1607,也因为周年更新的营销名称所知)。
Windows10和“一个内核”多年来,几种不同类型的Windows已经发展起来。除了在PC上运行的主流Windows之外,还有Xbox360游戏控制台,它运行一个分叉Windows2000。WindowsPhone7基于WindowsCE(微软的实时操作系统)运行的一个变体。维护和扩展所有这些代码库显然是困难的。因此,微软决定将内核和基础平台支持的二进制文件聚合为一个。这开始于Windows8和Windows电话8,其中共享内核(Windows8.1和Windows电话8.1具有聚合的Windows运行时API)。使用Windows10,融合就完成了,这个共享平台被称为Onecore,它运行在PC、电话、XboxOne游戏控制台、全息屏和物联网(IoT)设备(如树莓Pi2)上[7]。
2.2开发工具
PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。
MySQL是一个关系型数据库管理系统,它的范围包括了膝上型计算机、台式机、超市服务器。20世纪,最初的MySQL是由Sybase专门为UNIX系统开发的,后来微软将它移植到了WindowsNT系统上。从1994年开始,微软发布独立于Sybase开发的MySQL版本,而Sybase在20世纪90年代后期,就已经停止使用MySQL这个名称。
MySQL提供MySQL多个拷贝之间以及其他数据库系统的复制服务。其中的分析服务是属于系统的一个完整部分,包括了:联机分析处理(OLAP)和数据挖掘工具。MySQL提供了一个大的图形化工具集和向导,引导数据库管理员执行各种任务,例如建立定期备份、在服务器之间复制数据,以及调整数据库性能。
2.3开发技术
2.3.1MVVM模式介绍
MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。微软的WPF带来了新的技术体验,如Silverlight、音频、视频、3D、动画……,这导致了软件UI层更加细节化、可定制化。同时,在技术层面,WPF也带来了 诸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由来便是MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构框架。它立足于原有MVP框架并且把WPF的新特性糅合进去,以应对客户日益复杂的需求变化。
2.3.2Django框架
Django是一个由Python编写的具有完整架站能力的开源Web框架。使用Django,只要很少的代码,Python的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的Web服务。
Django本身基于MVC模型,即Model(模型)+View(视图)+ Controller(控制器)设计模式,因此天然具有MVC的出色基因:开发快捷、部署方便、可重用性高、维护成本低等。Python加Django是快速开发、设计、部署网站的最佳组合。
Django具有以下特点:
能完善、要素齐全:该有的、可以没有的都有,常用的、不常用的工具都用。Django提供了大量的特性和工具,无须你自己定义、组合、增删及修改。
完善的文档:经过十多年的发展和完善,Django有广泛的实践经验和完善的在线文档(可惜大多数为英文)。开发者遇到问题时可以搜索在线文档寻求解决方案。
强大的数据库访问组件:Django的Model层自带数据库ORM组件,使得开发者无须学习其他数据库访问技术(SQL、pymysql、SQLALchemy等)。
灵活的URL映射:Django使用正则表达式管理URL映射,灵活性高。
丰富的Template模板语言:类似jinjia模板语言,不但原生功能丰富,还可以自定义模板标签。
Vue.js是一套构建用户界面的渐进式框架。与其他重量级框架不同的是,Vue采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。
Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
Vue.js 自身不是一个全能框架——它只聚焦于视图层。因此它非常容易学习,非常容易与其它库或已有项目整合。另一方面,在与相关工具和支持库一起使用时,Vue.js 也能驱动复杂的单页应用。
3.1 系统可行性分析
3.1.1技术可行性
“晋农进商”——农产品跨境电子商务平台具有显著的技术可行性。Django作为成熟、稳定的Web开发框架,提供了丰富的功能和灵活的扩展性,能够支撑复杂的数据处理、算法实现和用户交互需求。Django的社区支持广泛,拥有丰富的资源和文档,为系统的开发和维护提供了有力保障。因此,从技术角度来看,利用Django实现“晋农进商”—农产品跨境电子商务平台是完全可行的。
在“晋农进商”—农产品跨境电子商务平台开发之前所做的市场调研及其他的相关的系统,都是没有任何费用的,都是通过开发者自己的努力,所有的工作的都是自己亲力亲为,在碰到自己比较难以解决的问题,大多是通过同学和指导老师的帮助进行相关信息的解决,所以对于“晋农进商”—农产品跨境电子商务平台的开发在经济上是完全可行的,没有任何费用支出的。
使用比较成熟的技术,系统是基于django的开发,采用Mysql数据库。所以系统在开发人力、财力要求不高,具有经济可行性。
可操作性主要是对“晋农进商”—农产品跨境电子商务平台设计完成后,用户的使用体验度,以及管理员可以通过系统随时管理相关的数据信息,并且对于管理员、普通用户、商家用户这三个用户角色,都可以简单明了的进入到自己的系统界面,通过界面导航菜单可以简单明了地操作功能模块,方便用户信息的操作需求和管理员管理数据信息,对于系统的操作,不需要专业人员都可以直接进行功能模块的操作管理,所以在系统的可操作性是完全可以的。本系统的操作使用的也是界面窗口进行登录,所以操作人员只要会简单的电脑操作就完全可以的。
3.2 系统需求分析
在设计和实现“晋农进商”——农产品跨境电子商务平台之前,我们进行了深入的需求分析和市场调研,旨在全面理解农产品跨境交易的需求和痛点,确保平台能够精准地满足农民、消费者以及农业产业链各方的需求。
我们深知,“晋农进商”不仅是一个电商平台,更是一个连接国内外市场、促进农业产业升级的重要桥梁。因此,我们致力于打造一个既符合农产品交易特性,又能高效支撑农业产业链发展的平台。
明确用户需求:通过广泛的访谈、问卷和数据分析,我们深入了解了农民对于农产品销售的需求和期望,包括如何扩大销售渠道、提高产品附加值、获取市场信息等。同时,我们也关注了消费者的购买习惯和偏好,以及他们对于农产品品质、溯源和配送等方面的要求。
平台功能与性能:为了满足各方需求,“晋农进商”平台将提供多种功能,包括农产品展示、在线交易、支付结算、物流配送、溯源查询等。在性能上,平台需要具备高并发、低延迟、稳定可靠等特点,以确保交易的顺畅进行。
农产品品质与安全:农产品跨境交易涉及到不同国家和地区的标准和法规,因此平台需要建立严格的品质控制和安全监管机制,确保所售农产品的质量符合国内外标准,保障消费者的权益。
数据分析与市场洞察:为了更好地服务农民和消费者,“晋农进商”平台将提供数据分析功能,帮助用户了解市场趋势、预测价格变动、优化产品结构等。同时,平台还将提供市场洞察服务,帮助各方把握国内外市场动态,制定合适的经营策略。
持续创新与发展:农产品跨境电子商务是一个快速发展的领域,“晋农进商”平台需要保持持续的创新和发展动力,不断引入新技术、新模式,以满足市场的变化和用户的需求。
综上所述,“晋农进商”农产品跨境电子商务平台旨在通过技术手段解决农产品跨境交易中的实际问题,促进农业产业升级和国际贸易合作。我们期待这一平台能够为农民和消费者带来更加便捷、高效、安全的交易体验,推动山西乃至全国农产品市场的繁荣发展。
3.3系统用例分析
系统的用例展示的是系统功能与用户之间的关系,通过用例的方式能够直观的展示出来,本“晋农进商”—农产品跨境电子商务平台的完整UML用例图分别是图3-1、图3-2和图3-3。
图3-1 “晋农进商”—农产品跨境电子商务平台普通用户角色用例图
图3-2 “晋农进商”—农产品跨境电子商务平台商家用户角色用
图3-3 “晋农进商”—农产品跨境电子商务平台管理员角色用
3.4系统流程分析
3.4.1操作流程
图3-4登录流程图
3.4.2添加信息流程
添加信息流程图,如图所示:
图3-5添加信息流程图
3.4.3删除信息流程
删除信息流程图,如图所示:
图3-6删除信息流程图
4.1系统设计的原理
系统设计原理包括:
- 模块化。模块化就是把整个程序划分为多个模块,每个模块有自己的名字并可以被独立访问。所有模块的功能集合起来就可以满足用户需求。
- 抽象。抽象是暂时忽略软件的细节,集中精力将软件的本质特征提取出来。
- 逐步求精。总体设计需要先解决主要问题,再将问题一步步细化。
- 局部化和信息隐藏。不同模块之间,信息相互不能访问,是不能访问的;并且应该在相近的物理地址上放置关系较密切的软件元素。
- 模块独立。模块之间应该遵循高内聚,低耦合的原则。
4.2系统功能设计
一旦您访问了这款应用,您需要完成一项重大的任务:通过认证,获得相应的权限。一旦您完成了认证,您将可以访问到一些关于您的服务,包括:后台首页、系统用户、销量对比管理、销售额管理、系统管理、通知公告管理、商城管理等。这个界面非常清晰明了,通过指引您就能轻松地完成各种任务。
系统的功能结构图如下所示。
图4-1系统功能结构图
4.3数据库设计
数据库设计(DatabaseDesign)是指对一个给定的环境,构造良好的数据库模式,建立数据库系统,使之能够最有效地存储数据,满足各类用户的需求即处理要求和信息要求。在数据库应用范围内,经常把使用数据库的系统称为数据库的应用系统。
4.3.1概念模型设计
E-R设计方法是一种通过E-R图来描述现实世界信息结构的DB设计方法。E-R图由实体、属性、联系三部分组成。它有两个优点,即接近于人的思维,容易理解;与计算机无关,用户容易接受。
系统的主要实体间关系E-R图如下图所示:
图4-2系统E-R图
实体间可建立某种联系,大致可分为三种:(1)实体间一对一联系,这种关系可以独立也可与其他合并;(2)实体间是一对多联系,实体与另一个n端实体发生联系;(3)实体间为多对多联系,两个实体间存在某种关系。每个实体上码所具有的属性就是关系属性,实体码的组合就是关系码。
4.3.2逻辑结构设计
根据E-R模型,“晋农进商”—农产品跨境电子商务平台建立了以下逻辑数据结构,下面是各数据表的详细说明。
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | token_id | int | 10 | 0 | N | Y | 临时访问牌ID | |
2 | token | varchar | 64 | 0 | Y | N | 临时访问牌 | |
3 | info | text | 65535 | 0 | Y | N | ||
4 | maxage | int | 10 | 0 | N | N | 2 | 最大寿命:默认2小时 |
5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
7 | user_id | int | 10 | 0 | N | N | 0 | 用户编号: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | address_id | int | 10 | 0 | N | Y | 收货地址: | |
2 | name | varchar | 32 | 0 | Y | N | 姓名: | |
3 | phone | varchar | 13 | 0 | Y | N | 手机: | |
4 | postcode | varchar | 8 | 0 | Y | N | 邮编: | |
5 | address | varchar | 255 | 0 | N | N | 地址: | |
6 | user_id | mediumint | 8 | 0 | N | N | 用户ID:[0,8388607]用户获取其他与用户相关的数据 | |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
9 | default | bit | 1 | 0 | N | N | 0 | 默认判断 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | auth_id | int | 10 | 0 | N | Y | 授权ID: | |
2 | user_group | varchar | 64 | 0 | Y | N | 用户组: | |
3 | mod_name | varchar | 64 | 0 | Y | N | 模块名: | |
4 | table_name | varchar | 64 | 0 | Y | N | 表名: | |
5 | page_title | varchar | 255 | 0 | Y | N | 页面标题: | |
6 | path | varchar | 255 | 0 | Y | N | 路由路径: | |
7 | position | varchar | 32 | 0 | Y | N | 位置: | |
8 | mode | varchar | 32 | 0 | N | N | _blank | 跳转方式: |
9 | add | tinyint | 3 | 0 | N | N | 1 | 是否可增加: |
10 | del | tinyint | 3 | 0 | N | N | 1 | 是否可删除: |
11 | set | tinyint | 3 | 0 | N | N | 1 | 是否可修改: |
12 | get | tinyint | 3 | 0 | N | N | 1 | 是否可查看: |
13 | field_add | text | 65535 | 0 | Y | N | 添加字段: | |
14 | field_set | text | 65535 | 0 | Y | N | 修改字段: | |
15 | field_get | text | 65535 | 0 | Y | N | 查询字段: | |
16 | table_nav_name | varchar | 500 | 0 | Y | N | 跨表导航名称: | |
17 | table_nav | varchar | 500 | 0 | Y | N | 跨表导航: | |
18 | option | text | 65535 | 0 | Y | N | 配置: | |
19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | cart_id | int | 10 | 0 | N | Y | 购物车ID: | |
2 | title | varchar | 64 | 0 | Y | N | 标题: | |
3 | img | varchar | 255 | 0 | N | N | 0 | 图片: |
4 | user_id | int | 10 | 0 | N | N | 0 | 用户ID: |
5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
7 | state | int | 10 | 0 | N | N | 0 | 状态:使用中,已失效 |
8 | price | double | 9 | 2 | N | N | 0.00 | 单价: |
9 | price_ago | double | 9 | 2 | N | N | 0.00 | 原价: |
10 | price_count | double | 11 | 2 | N | N | 0.00 | 总价: |
11 | num | int | 10 | 0 | N | N | 1 | 数量: |
12 | goods_id | mediumint | 8 | 0 | N | N | 商品id:[0,8388607] | |
13 | type | varchar | 64 | 0 | N | N | 未分类 | 商品分类: |
14 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]用于产品规格描述 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | collect_id | int | 10 | 0 | N | Y | 收藏ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 收藏人ID: |
3 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
4 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
5 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
6 | title | varchar | 255 | 0 | Y | N | 标题: | |
7 | img | varchar | 255 | 0 | Y | N | 封面: | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | comment_id | int | 10 | 0 | N | Y | 评论ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 评论人ID: |
3 | reply_to_id | int | 10 | 0 | N | N | 0 | 回复评论ID:空为0 |
4 | content | longtext | 2147483647 | 0 | Y | N | 内容: | |
5 | nickname | varchar | 255 | 0 | Y | N | 昵称: | |
6 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
9 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
10 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
11 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | goods_id | mediumint | 8 | 0 | N | Y | 产品id:[0,8388607] | |
2 | title | varchar | 125 | 0 | Y | N | 标题:[0,125]用于产品和html的<title>标签中 | |
3 | img | text | 65535 | 0 | Y | N | 封面图:用于显示于产品列表页 | |
4 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]用于产品规格描述 | |
5 | price_ago | double | 8 | 2 | N | N | 0.00 | 原价:[1] |
6 | price | double | 8 | 2 | N | N | 0.00 | 卖价:[1] |
7 | sales | int | 10 | 0 | N | N | 0 | 销量:[0,1000000000] |
8 | inventory | int | 10 | 0 | N | N | 0 | 商品库存 |
9 | type | varchar | 64 | 0 | N | N | 商品分类: | |
10 | hits | int | 10 | 0 | N | N | 0 | 点击量:[0,1000000000]访问这篇产品的人次 |
11 | content | longtext | 2147483647 | 0 | Y | N | 正文:产品的主体内容 | |
12 | img_1 | text | 65535 | 0 | Y | N | 主图1: | |
13 | img_2 | text | 65535 | 0 | Y | N | 主图2: | |
14 | img_3 | text | 65535 | 0 | Y | N | 主图3: | |
15 | img_4 | text | 65535 | 0 | Y | N | 主图4: | |
16 | img_5 | text | 65535 | 0 | Y | N | 主图5: | |
17 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
18 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
19 | customize_field | text | 65535 | 0 | Y | N | 自定义字段 | |
20 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
21 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
22 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
23 | user_id | int | 10 | 0 | Y | N | 0 | 添加人 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | type_id | int | 10 | 0 | N | Y | 商品分类ID: | |
2 | father_id | smallint | 5 | 0 | N | N | 0 | 上级分类ID:[0,32767] |
3 | name | varchar | 255 | 0 | Y | N | 商品名称: | |
4 | desc | varchar | 255 | 0 | Y | N | 描述: | |
5 | icon | varchar | 255 | 0 | Y | N | 图标: | |
6 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
7 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | hits_id | int | 10 | 0 | N | Y | 点赞ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | logistics_delivery_id | int | 10 | 0 | N | Y | 物流配送ID | |
2 | order_number | varchar | 64 | 0 | Y | N | 订单号 | |
3 | product_name | varchar | 64 | 0 | Y | N | 商品名称 | |
4 | purchase_quantity | varchar | 64 | 0 | Y | N | 购买数量 | |
5 | total_transaction_amount | double | 11 | 2 | Y | N | 0.00 | 交易总额 |
6 | the_date_of_issuance | date | 10 | 0 | Y | N | 发货日期 | |
7 | delivery_number | varchar | 30 | 0 | Y | N | 配送订单 | |
8 | ordinary_users | int | 10 | 0 | Y | N | 0 | 普通用户 |
9 | shipping_address | varchar | 64 | 0 | Y | N | 收货地址 | |
10 | delivery_status | varchar | 64 | 0 | Y | N | 配送状态 | |
11 | signing_status | varchar | 64 | 0 | Y | N | 签收状态 | |
12 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
13 | contact_name | varchar | 255 | 0 | Y | N | 联系人名字 | |
14 | merchant_id | int | 10 | 0 | Y | N | 商家id | |
15 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
16 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | merchant_users_id | int | 10 | 0 | N | Y | 商家用户ID | |
2 | merchant_name | varchar | 64 | 0 | Y | N | 商家名称 | |
3 | merchant_phone_number | varchar | 16 | 0 | Y | N | 商家电话 | |
4 | merchant_address | varchar | 64 | 0 | Y | N | 商家地址 | |
5 | business_license | varchar | 255 | 0 | Y | N | 营业执照 | |
6 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
7 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
8 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | notice_id | mediumint | 8 | 0 | N | Y | 公告id: | |
2 | title | varchar | 125 | 0 | N | N | 标题: | |
3 | content | longtext | 2147483647 | 0 | Y | N | 正文: | |
4 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
5 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | order_id | int | 10 | 0 | N | Y | 订单ID: | |
2 | order_number | varchar | 64 | 0 | Y | N | 订单号: | |
3 | goods_id | mediumint | 8 | 0 | N | N | 商品id:[0,8388607] | |
4 | title | varchar | 32 | 0 | Y | N | 商品标题: | |
5 | img | varchar | 255 | 0 | Y | N | 商品图片: | |
6 | price | double | 10 | 2 | N | N | 0.00 | 价格: |
7 | price_ago | double | 10 | 2 | N | N | 0.00 | 原价: |
8 | num | int | 10 | 0 | N | N | 1 | 数量: |
9 | price_count | double | 8 | 2 | N | N | 0.00 | 总价: |
10 | norms | varchar | 255 | 0 | Y | N | 规格: | |
11 | type | varchar | 64 | 0 | N | N | 未分类 | 商品分类: |
12 | contact_name | varchar | 32 | 0 | Y | N | 联系人姓名: | |
13 | contact_email | varchar | 125 | 0 | Y | N | 联系人邮箱: | |
14 | contact_phone | varchar | 11 | 0 | Y | N | 联系人手机: | |
15 | contact_address | varchar | 255 | 0 | Y | N | 收件地址: | |
16 | postal_code | varchar | 9 | 0 | Y | N | 邮政编码: | |
17 | user_id | int | 10 | 0 | N | N | 0 | 买家ID: |
18 | merchant_id | mediumint | 8 | 0 | N | N | 0 | 商家ID: |
19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
21 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]用于产品规格描述 | |
22 | state | varchar | 16 | 0 | N | N | 待付款 | 订单状态:待付款,待发货,待签收,已签收,待退款,已退款,已拒绝,已完成 |
23 | remark | text | 65535 | 0 | Y | N | 订单备注 | |
24 | delivery_state | varchar | 16 | 0 | Y | N | 未配送 | 发货状态:未配送,已配送 |
25 | vip_discount | double | 11 | 2 | Y | N | 0.00 | 折扣 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | praise_id | int | 10 | 0 | N | Y | 点赞ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
8 | status | bit | 1 | 0 | N | N | 1 | 点赞状态:1为点赞,0已取消 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | product_mall_id | int | 10 | 0 | N | Y | 产品商城ID | |
2 | specifications | varchar | 64 | 0 | Y | N | 规格 | |
3 | source | varchar | 64 | 0 | Y | N | 来源 | |
4 | merchant_users | int | 10 | 0 | Y | N | 0 | 商家用户 |
5 | merchant_name | varchar | 64 | 0 | Y | N | 商家名称 | |
6 | merchant_phone_number | varchar | 64 | 0 | Y | N | 商家电话 | |
7 | merchant_address | varchar | 64 | 0 | Y | N | 商家地址 | |
8 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
9 | cart_title | varchar | 125 | 0 | Y | N | 标题:[0,125]用于产品html的标签中 | |
10 | cart_img | text | 65535 | 0 | Y | N | 封面图:用于显示于产品列表页 | |
11 | cart_description | varchar | 255 | 0 | Y | N | 描述:[0,255]用于产品规格描述 | |
12 | cart_price_ago | double | 8 | 2 | N | N | 0.00 | 原价:[1] |
13 | cart_price | double | 8 | 2 | N | N | 0.00 | 卖价:[1] |
14 | cart_inventory | int | 10 | 0 | N | N | 0 | 商品库存 |
15 | cart_type | varchar | 64 | 0 | N | N | 未分类 | 商品分类: |
16 | cart_content | longtext | 2147483647 | 0 | Y | N | 正文:产品的主体内容 | |
17 | cart_img_1 | text | 65535 | 0 | Y | N | 主图1: | |
18 | cart_img_2 | text | 65535 | 0 | Y | N | 主图2: | |
19 | cart_img_3 | text | 65535 | 0 | Y | N | 主图3: | |
20 | cart_img_4 | text | 65535 | 0 | Y | N | 主图4: | |
21 | cart_img_5 | text | 65535 | 0 | Y | N | 主图5: | |
22 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
23 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | regular_users_id | int | 10 | 0 | N | Y | 普通用户ID | |
2 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
3 | mobile_phone_number | varchar | 16 | 0 | Y | N | 手机号码 | |
4 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
5 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
6 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | sales_comparison_id | int | 10 | 0 | N | Y | 销量对比ID | |
2 | product_name | varchar | 64 | 0 | Y | N | 产品名称 | |
3 | total_sales_volume_kg | varchar | 64 | 0 | Y | N | 销售总量(公斤) | |
4 | registration_date | varchar | 64 | 0 | Y | N | 登记日期 | |
5 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | sales_revenue_id | int | 10 | 0 | N | Y | 销售额ID | |
2 | product_name | varchar | 64 | 0 | Y | N | 产品名称 | |
3 | total_sales | varchar | 64 | 0 | Y | N | 销售总额 | |
4 | registration_date | varchar | 64 | 0 | Y | N | 登记日期 | |
5 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | slides_id | int | 10 | 0 | N | Y | 轮播图ID: | |
2 | title | varchar | 64 | 0 | Y | N | 标题: | |
3 | content | varchar | 255 | 0 | Y | N | 内容: | |
4 | url | varchar | 255 | 0 | Y | N | 链接: | |
5 | img | varchar | 255 | 0 | Y | N | 轮播图: | |
6 | hits | int | 10 | 0 | N | N | 0 | 点击量: |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | upload_id | int | 10 | 0 | N | Y | 上传ID | |
2 | name | varchar | 64 | 0 | Y | N | 文件名 | |
3 | path | varchar | 255 | 0 | Y | N | 访问路径 | |
4 | file | varchar | 255 | 0 | Y | N | 文件路径 | |
5 | display | varchar | 255 | 0 | Y | N | 显示顺序 | |
6 | father_id | int | 10 | 0 | Y | N | 0 | 父级ID |
7 | dir | varchar | 255 | 0 | Y | N | 文件夹 | |
8 | type | varchar | 32 | 0 | Y | N | 文件类型 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | user_id | mediumint | 8 | 0 | N | Y | 用户ID:[0,8388607]用户获取其他与用户相关的数据 | |
2 | state | smallint | 5 | 0 | N | N | 1 | 账户状态:[0,10](1可用|2异常|3已冻结|4已注销) |
3 | user_group | varchar | 32 | 0 | Y | N | 所在用户组:[0,32767]决定用户身份和权限 | |
4 | login_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 上次登录时间: |
5 | phone | varchar | 11 | 0 | Y | N | 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时 | |
6 | phone_state | smallint | 5 | 0 | N | N | 0 | 手机认证:[0,1](0未认证|1审核中|2已认证) |
7 | username | varchar | 16 | 0 | N | N | 用户名:[0,16]用户登录时所用的账户名称 | |
8 | nickname | varchar | 16 | 0 | Y | N | 昵称:[0,16] | |
9 | password | varchar | 64 | 0 | N | N | 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成 | |
10 | | varchar | 64 | 0 | Y | N | 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时 | |
11 | email_state | smallint | 5 | 0 | N | N | 0 | 邮箱认证:[0,1](0未认证|1审核中|2已认证) |
12 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
13 | open_id | varchar | 255 | 0 | Y | N | 针对获取用户信息字段 | |
14 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
15 | vip_level | varchar | 255 | 0 | Y | N | 会员等级 | |
16 | vip_discount | double | 11 | 2 | Y | N | 0.00 | 会员折扣 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | group_id | mediumint | 8 | 0 | N | Y | 用户组ID:[0,8388607] | |
2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000] |
3 | name | varchar | 16 | 0 | N | N | 名称:[0,16] | |
4 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该用户组的特点或权限范围 | |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
8 | register | smallint | 5 | 0 | Y | N | 0 | 注册位置: |
9 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5.1普通用户功能模块实现
5.1.1登录界面
登录模块,用户、管理员可以通过登录进入该系统,如果输入正确用户名和密码,则可以进入该系统。用户登录界面如下图所示。
图5-1登录模块界面图
登录关键代码如下:
def Login(self, ctx):
print("===================登录=====================")
ret = {
"error": {
"code": 70000,
"message": "账户不存在",
}
}
body = ctx.body
password = md5hash(body["password"]) or ""
obj = service_select("user").Get_obj(
{"username": body["username"]}, {"like": False}
)
if obj:
user_group = service_select("user_group").Get_obj({'name': obj['user_group']}, {"like": False})
if user_group and user_group['source_table'] != '':
user_obj = service_select(user_group['source_table']).Get_obj({"user_id": obj['user_id']}, {"like": False})
if user_obj['examine_state'] == '未通过':
ret = {
"error": {
"code": 70000,
"message": "账户未通过审核",
}
}
return ret
if user_obj['examine_state'] == '未审核':
ret = {
"error": {
"code": 70000,
"message": "账户未审核",
}
}
return ret
if obj["state"] == 1:
if obj["password"] == password:
timeout = timezone.now()
timestamp = int(time.mktime(timeout.timetuple())) * 1000
token = md5hash(str(obj["user_id"]) + "_" + str(timestamp))
ctx.request.session[token] = obj["user_id"]
service_select("access_token").Add(
{"token": token, "user_id": obj["user_id"]}
)
obj["token"] = token
ret = {
"result": {"obj": obj}
}
else:
ret = {
"error": {
"code": 70000,
"message": "密码错误",
}
}
else:
ret = {
"error": {
"code": 70000,
"message": "用户账户不可用,请联系管理员",
}
}
return ctx.response(json.dumps(ret, ensure_ascii=False))
如果某个人员进入该系统,则注册该用户的信息,如果注册成功,就可以进入该系统,显示的结果如下。注册用户界面如下图所示。
图5-2注册用户界面图
注册关键代码如下:
def Register(self, ctx):
print("===================注册=====================")
userService = service_select("user")
body = ctx.body
if "username" not in body and body["username"] == '':
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "用户名不能为空",
}
}, ensure_ascii=False))
if "user_group" not in body and body["user_group"] == '':
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "用户组不能为空",
}
}, ensure_ascii=False))
if "password" not in body and body["password"] == '':
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "密码不能为空",
}
}, ensure_ascii=False))
post_param = body
post_param['nickname'] = body["nickname"] or ""
post_param['password'] = md5hash(body["password"])
obj = userService.Get_obj({"username": post_param['username']}, {"like": False})
if obj:
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "用户名已存在",
}
}, ensure_ascii=False))
ret = {
"error": {
"code": 70000,
"message": "注册失败",
}
}
bl = userService.Add(post_param)
if bl:
ret = {
"result": {
"bl": True,
"message": "注册成功"
}
}
return ctx.response(json.dumps(ret, ensure_ascii=False))
用户使用该系统注册完成后,用户对登录密码有修改需求时,系统也可以提供用户修改密码权限。系统中所有的操作者能够变更自己的密码信息,执行该功能首先必须要登入系统,然后选择密码变更选项以后在给定的文本框中填写初始密码和新密码来完成修改密码的操作。在填写的时候,假如两次密码填写存在差异,那么此次密码变更操作失败。密码修改界面如下图所示。
图5-3密码修改界面图
找回密码关健代码如下:
def Forget_password(self, ctx):
print("===================修改密码=====================")
ret = {
"error": {
"code": 70000,
"message": "用户信息不能没有"
}
}
body = ctx.body
if not body["code"]:
return {
"error": {
"code": 70000,
"message": "验证码不存在或者错误"
}
}
obj = service_select("user").Get_obj(
{"username": body["username"]}, {"like": False}
)
if not obj:
return {
"error": {
"code": 70000,
"message": "用户名不存在或者错误"
}
}
password = md5hash(body["password"])
if not password:
return {
"error": {
"code": 70000,
"message": "密码不存在或者错误"
}
}
bl = service_select("user").Set({"user_id": obj["user_id"]}, {"password": password})
if bl:
ret = {"result": {"bl": True, "message": "修改成功"}}
else:
ret = {
"error": {
"code": 70000,
"message": "修改失败",
}
}
return ctx.response(json.dumps(ret, ensure_ascii=False))
修改密码代码如下:
def Change_password(self, ctx):
print("===================修改密码=====================")
ret = {
"error": {
"code": 70000,
"message": "账号未登录",
}
}
request = ctx.request
headers = request.headers
if ("x-auth-token" in headers) and headers["x-auth-token"]:
token = headers["x-auth-token"]
user_id = tokenGetUserId(token, request)
userService = service_select("user")
body = ctx.body
password = md5hash(body["o_password"])
obj = userService.Get_obj({"user_id": user_id, "password": password}, {"like": False})
if obj:
password = md5hash(body["password"])
bl = userService.Set({"user_id": user_id}, {"password": password})
if bl:
ret = {"result": {"bl": True, "message": "修改成功"}}
else:
ret = {
"error": {
"code": 70000,
"message": "修改失败",
}
}
else:
ret = {
"error": {
"code": 70000,
"message": "密码错误",
}
}
else:
ret = {
"error": {
"code": 70000,
"message": "账户未登录",
}
}
return ctx.response(json.dumps(ret, ensure_ascii=False))
用户可以查看订单的详细信息,包括订单编号、下单时间、订单备注等,可以对订单进行支付。订单界面如下图所示。
图5-4订单页面图
用户输入收货人、手机号及详细地址可以对收货地址进行添加。我的地址界面如下图所示。收货地址界面如下图所示。
商家可以添加新的产品信息,编辑现有产品信息,包括产品名称、描述、价格、库存、图片等,确保产品信息的准确性和时效性。产品商城界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/12864dd132fb43d6869cbf415b49ca2c.png)
图5-6产品商城页面图
商家可以查看所有订单的列表,包括订单状态、付款情况、订单详情等,便于商家及时处理订单并跟踪订单状态。订单列表界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/1eaccebf6010460d9c004b5b17a0d9ed.png)
图5-7订单列表页面图
管理员输入账号、密码、验证码点击“登录”按钮就会跳转到登录界面。如下图所示。
图5-8管理员登录页面图
管理员可以对系统中所有的用户角色进行管控,包含了管理员、普通用户和商家用户这三种角色,如果需要添加新的用户,点击页面中的“添加”按钮根据提示输入上用户信息,点击“提交”以后在对应的用户界面就可以查看到了,可以点击用户后面的“删除”按钮直接删除某一用户。如下图所示。
图5-7系统用户页面图
增删查改关键代码如下:
增
def Add(self, ctx):
body = ctx.body
unique = self.config.get("unique")
obj = None
if unique:
qy = {}
for i in range(len(unique)):
key = unique[i]
qy[key] = body.get(key)
obj = self.service.Get_obj(qy)
if not obj:
error = self.Add_before(ctx)
if error["code"]:
return {"error": error}
error = self.Events("add_before", ctx, None)
if error["code"]:
return {"error": error}
result = self.service.Add(body, self.config)
if self.service.error:
return {"error": self.service.error}
res = self.Add_after(ctx, result)
if res:
result = res
res = self.Events("add_after", ctx, result)
if res:
result = res
return {"result": result}
else:
return {"error": {"code": 10000, "message": "已存在"}}
删
def Del(self, ctx):
if len(ctx.query) == 0:
errorMsg = {"code": 30000, "message": "删除条件不能为空!"}
return errorMsg
result = self.service.Del(ctx.query, self.config)
if self.service.error:
return {"error": self.service.error}
return {"result": result}
改
def Set(self, ctx):
error = self.Set_before(ctx)
if error["code"]:
return {"error": error}
error = self.Events("set_before", ctx, None)
if error["code"]:
return {"error": error}
query = ctx.query
if 'page' in query.keys():
del ctx.query['page']
if 'size' in query.keys():
del ctx.query['size']
if 'orderby' in query.keys():
del ctx.query['orderby']
result = self.service.Set(ctx.query, ctx.body, self.config)
if self.service.error:
return {"error": self.service.error}
res = self.Set_after(ctx, result)
if res:
result = res
res = self.Events("set_after", ctx, result)
if res:
result = res
return {"result": result}
查多条数据:
def Get_list(self, ctx):
query = dict(ctx.query)
config_plus = {}
if "field" in query:
field = query.pop("field")
config_plus["field"] = field
if "page" in query:
config_plus["page"] = query.pop("page")
if "size" in query:
config_plus["size"] = query.pop("size")
if "orderby" in query:
config_plus["orderby"] = query.pop("orderby")
if "like" in query:
config_plus["like"] = query.pop("like")
if "groupby" in query:
config_plus["groupby"] = query.pop("groupby")
count = self.service.Count(query)
lst = []
if self.service.error:
return {"error": self.service.error}
elif count:
lst = self.service.Get_list(query,
obj_update(self.config, config_plus))
if self.service.error:
return {"error": self.service.error}
self.interact_list(ctx, lst)
return {"result": {"list": lst, "count": count}}
查一条数据:
def Get_obj(self, ctx):
query = dict(ctx.query)
config_plus = {}
if "field" in query:
field = query.pop("field")
config_plus["field"] = field
obj = self.service.Get_obj(query, obj_update(self.config, config_plus))
if self.service.error:
return {"error": self.service.error}
if obj:
self.interact_obj(ctx, obj)
return {"result": {"obj": obj}}
管理员可以查看不同产品或商家的销量对比情况,分析销售情况,为商家提供数据支持和决策参考。如下图所示。
图5-8销量对比列表页面图
点击“系统管理”管理员可以插入轮播图图片、填写标题进行提交。如下图所示。
5.3.5 通知公告管理界面
点击“通知公告管理”这个菜单,可以查看到系统中所有添加的系统公告,支持通过标题对系统公告进行查询,添加、删除等操作。界面如下图所示。
图5-10通在公告管理界面图
5.3.6分类列表界面
管理员可以管理产品的分类列表,包括添加、编辑和删除不同分类,确保产品分类的清晰和规范。界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/61efe706d83b44bc9bad6f5c7e3a7a12.png)
6系统测试
测试存在于软件开发进程中的最后一个阶段,它可以保证一个软件的开发质量是否符合设计者的初衷,也为程序的正式上线做了最后一道质量检测的工序。软件测试主要是控制各种条件、包括软件输出方式,使用模式和运行环境等,来评估一个系统或应用是否符合设计标准。在软件测试过程中,我们一般刻意的去制造错误和极端条件,不能仅依照正常模式允许,而是多去尝试那些意外的情况。
系统测试包括:用户登录功能测试、产品商城查看测试、发布公告信息、产品商城搜索、密码修改功能测试,如表6-1、6-2、6-3、6-4、6-5所示:
表6-1 用户登录功能测试表
用例名称 | 用户登录系统 |
目的 | 测试用户通过正确的用户名和密码可否登录功能 |
前提 | 未登录的情况下 |
测试流程 | 1) 进入登录页面 2) 输入正确的用户名和密码 |
预期结果 | 用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入 |
实际结果 | 实际结果与预期结果一致 |
产品商城查看功能测试:
表6-2 产品商城查看功能测试表
用例名称 | 产品商城查看 |
目的 | 测试产品商城查看功能 |
前提 | 用户登录 |
测试流程 | 点击产品商城列表 |
预期结果 | 可以查看到所有产品商城 |
实际结果 | 实际结果与预期结果一致 |
管理员发布公告信息界面测试:
表6-3 管理员发布公告信息界面测试表
用例名称 | 公告信息发布测试用例 |
目的 | 测试公告信息发布功能 |
前提 | 用户正常登录情况下 |
测试流程 | 1)点击公告信息管理,然后点击发布添加后并填写信息。 2)点击进行提交。 |
预期结果 | 提交以后,页面首页会显示新的公告信息 |
实际结果 | 实际结果与预期结果一致 |
产品商城搜索功能测试:
表6-4产品商城搜索功能测试表
用例名称 | 产品商城搜索测试 |
目的 | 测试产品商城搜索功能 |
前提 | 无 |
测试流程 | 1)在搜索框填入搜索关键字。 2)点击搜索按钮。 |
预期结果 | 页面显示包含有搜索关键字的产品商城 |
实际结果 | 实际结果与预期结果一致 |
密码修改功能测试:
表6-5 密码修改功能测试表
用例名称 | 密码修改测试用例 |
目的 | 测试管理员密码修改功能 |
前提 | 管理员用户正常登录情况下 |
测试流程 | 1)管理员密码修改并完成填写。 2)点击进行提交。 |
预期结果 | 使用新的密码可以登录 |
实际结果 | 实际结果与预期结果一致 |
经过对“晋农进商”—农产品跨境电子商务平台的测试,我们已经完成了5大模块的检测,包括用户登录功能测试、产品商城查看测试、发布公告信息、产品商城搜索、密码修改功能测试,这些功能为后续的推广运营提供了强有力的技术支持。
通过“晋农进商”—农产品跨境电子商务平台的开发,本人巩固了之前学过的知识,如今将平时所学到的知识融合在设计中,在设计过程中,做了很多的准备,首先,在数据库系统的设计过程中,尤其是在数据库的工作原理、工作特点,对其深刻的讨论,与此同时,对于小型站点来说,最好服务器的选择,其次,利用所学的知识点分析所做的系统,并在此基础上设计。
目前本系统已经上线,正在试运行阶段,用户反馈良好,基本完成用户所需,试运行过程中没有出现阻断性问题,有一些不足和小问题也及时予以修正,系统上线后,为了保证数据的安全性,对系统进行了备份操作,系统备份是每两个月备份一次,数据库备份为每周备份一次,系统部署在云平台服务器中。
本次系统上线成功后,得到了用户的高度认可,但是在功能上和性能上还需做进一步的研究处理,使其有更高的性能和更好的用户体验。
系统在以后的升级过程中,需要解决一系列用户所提出的问题,例如打印过程中如何避免浏览器的兼容性问题,大量用户访问时,如何保持较高的响应速度,在系统今后的升级过程中将着重解决这些安全性问题。
[1]Gkrepis A ,Kosmas O ,Vlachos D , et al.Numerical solution of the Schrödinger equation using Neural Networks in Python[J].Journal of Physics: Conference Series,2024,2701(1):
[2]Rongcun W ,Senlei X ,Xingyu J , et al.An extensive study of the effects of different deep learning models on code vulnerability detection in Python code[J].Automated Software Engineering,2024,31(1):
[3]Aoyama T ,Yoshimi K ,Ido K , et al.H-wave – A Python package for the Hartree-Fock approximation and the random phase approximation[J].Computer Physics Communications,2024,298109087-.
[4]Zhang H ,Wang Y ,Lian B , et al.Scbean: a python library for single-cell multi-omics data analysis.[J].Bioinformatics (Oxford, England),2024,
[5]Venkatraman P ,Galán J W .shock_cooling_curve: A Python-based Package for Extensive and Efficient Modeling of Shock Cooling Emission in Supernovae[J].Research Notes of the AAS,2024,8(1):
[6]胡从寅,杨文远,赵鑫,等.基于Django+Vue.js的设计作品交易平台的实现[J].软件,2023,44(11):42-46.
[7]李杨.徐工Machmall跨境电商平台运营优化研究[D].南京邮电大学,2023.DOI:10.27251/d.cnki.gnjdc.2023.002030.
[8]张玉,赵进一.面向RCEP的云南省跨境电子商务发展模式与平台优化[J].物流科技,2023,46(18):95-98.DOI:10.13714/j.cnki.1002-3100.2023.18.025.
[9]刘向阳,布娲鹣·阿布拉.电子商务平台促进新疆林果产品产销对接研究[J].智慧农业导刊,2023,3(16):16-19.DOI:10.20028/j.zhnydk.2023.16.004.
[10]王冬冬.基于Django框架的Python课程在线教育平台设计[J].信息与电脑(理论版),2023,35(12):242-244.
[11]韦平安.基于Django的网络学习平台的开发与应用[J].山西电子技术,2023,(02):71-73.
[12]华厚强,康佳春.基于Python的校园交易平台设计[J].现代计算机,2022,28(15):105-111.
[13]李双远,李其昌.基于Django大学生网络空间安全攻防实践教学平台的设计与研究[J].吉林化工学院学报,2022,39(07):67-71.DOI:10.16039/j.cnki.cn22-1249.2022.07.013.
[14]林彬,杨彬彬,孙芳.基于Django框架的高校就业信息可视化平台的设计与实现[J].辽宁师范大学学报(自然科学版),2022,45(02):201-208.
[15]谢晓伟,包琦.基于Django与Vue的农产品质量追溯管理平台[J].电子技术与软件工程,2022,(12):246-249.
[16]林仙照(LUEPRASERT KANANART).跨境电子商务平台电子服务质量维度调查[D].山西大学,2021.DOI:10.27284/d.cnki.gsxiu.2021.001446.
[17]王晓燕.跨境电子商务促进农产品出口成本下降的路径分析[J].河北企业,2020,(10):45-46.DOI:10.19885/j.cnki.hbqy.2020.10.019.
[18]陈婷,花均南.我国跨境电商农产品多元化物流模式分析[J].商业经济研究,2020,(10):106-109.
[19]杨菂,赵万里,赵美丽.自由贸易区背景下中国水产品跨境电子商务发展模式创新[J].沈阳农业大学学报(社会科学版),2020,22(03):284-289.
[20]李胤珠,李爱杰,胡飞.玉溪农产品跨境电商与物流协同发展保障体系[J].全国流通经济,2020,(06):16-18.DOI:10.16834/j.cnki.issn1009-5292.2020.06.007.
经历了近三个多月的动手实践及老师辛勤的指导和同学朋友热心的帮助下,本人的毕业设计“晋农进商”—农产品跨境电子商务平台的基本功能也基本完成。
此次设计中,通过不断的探讨与学习使我熟悉、使我初步了解了Django相关技术。我做的是一个B/S结构的“晋农进商”—农产品跨境电子商务平台,使我对做网站所需要,及运行的环境有了初步的了解,在此次设计中我翻阅了较多的书籍,在有限的时间了丰富了对“晋农进商”—农产品跨境电子商务平台技术的知识也积累了少许的经验。起初对Python的初步认识,通过这次设计更进一步的了解了其工作原理,懂得了配置服务器环境,连接数据库源,在设计过程中,也学会了用Pycharm设计一个简单的页面,增强了动手的能力,激发了在此方面的兴趣。
但是由于时间、基础及缺乏实践等多方面的问题,还有诸多需要解决的问题依然存在,设计中很多方面考虑不够周全或者考虑不到。
非常感谢我的老师,我的同学,我的朋友并希望在今后的学习生活中不断陪养多方面的兴趣,不断学习进步从而能够实现独立完成。设计中存在的诸多缺点诚肯老师的原谅。
免费领取项目源码,请关注❥点赞收藏并私信博主,谢谢~