APP下载

基于SaaS模式的云农平台的设计与搭建

2021-01-14龙涛谌爱文

现代信息科技 2021年14期
关键词:农业信息化农业现代化

龙涛 谌爱文

摘 要:在鲜果类经济作物收獲季,一些地理位置相对偏僻的地区由于诸多原因导致农产品滞销问题较为严重。因此,文章基于Django语言和SaaS模式开发设计一个由数据采集系统、数据处理系统、文件管理系统三部分组成的信息服务云农平台,利用该平台的数据整合查询功能以及云盘文件管理功能解决地区农业获取市场信息不及时导致信息不对称问题,从而有效地提升农产品的销量问题,也提升地区农业的信息化水平,加快推动现代信息农业发展。

关键词:SaaS平台;农业信息化;农业现代化;滞销

中图分类号:TP311      文献标识码:A文章编号:2096-4706(2021)14-0001-04

Abstract: In the harvest season of fresh fruit cash crops, the unsalable problem of agricultural products in some relatively remote areas is more serious due to many reasons. Therefore, based on Django language and SaaS mode, this paper develops and designs an information service cloud agriculture platform composed of data acquisition system, data processing system and file management system, and uses the data integration query function and cloud disk file management function of the platform to solve the problem of information asymmetry caused by the untimely acquisition of market information by regional agriculture, so as to effectively improve the sales of agricultural products, improve the informatization level of regional agriculture, and accelerate the development of modern information agriculture.

Keywords: SaaS platform; agricultural informatization; agricultural modernization; unsalable

0  引  言

近年来,湘西州地区由于地处偏远,交通不便,市场信息比较闭塞等原因导致鲜果类产品滞销问题频发[1]。随着我国信息技术产业蓬勃发展,农业的发展与改革也搭上了信息快车,从传统农业向现代农业转变,迈向信息化、数字化。美国、法国、澳大利亚和日本等农业发达国家根据自己农业信息化情况并结合本地实际,形成了具有自身的特点农业信息化建设的方法与实践。目前,“农业+云平台”已成为现代农业发展的主方向,大数据分析平台的支撑已成为农业信息化,农业现代化的必要需求。因此,搭建一个农业数据云平台是极具意义的,能让当地农业产业体系更地享受信息红利,与此同时带动生产力的积极性,同时也深化数字农业改革,响应《数字农业农村发展规划(2019—2025年)》,将数字化赋能于传统农业,加速湘西地区的数字农业农村发展[2]。

1  系统总体设计

湘西云农平台是一个使用Django开发的SaaS结构平台,为企业或个人提供一种开箱即用的软件服务方式。考虑到平台的目标用户群体,该系统整体界面设计简洁明了,使用操作简便,对每个专业术语都标有通俗的说明与简要作用,极大方便了租户,降低了其学习成本,让租户可以直接从数据图中感受到市场变化。

该平台系统主要实现有两个主要功能:数据整合查询功能以及云盘文件管理功能。

数据整合查询功能为用户提供数据来源。该平台整合了互联网上有关农业作物的数据(价格、产地种植面积、产能等),其来源有果蔬、农业垂直网站,金融资讯网站、交易所、地方统计局和国家统计局年鉴等,为租户提供农作物的数据查询服务。该平台的数据查询种类主要有鲜果类,也包括其他种类,例如油料作物、蔬菜作物、粮食作物等,同时其布告栏上也整合了多家垂直网站的预警消息、供求帖、方便租户及时获取最新的消息以了解市场行情。农户不需要坐等商家上门,可直接通过供求帖获取商家联系方式进行洽谈,掌握云农平台上的数据提高议价能力[3]。

云盘文件管理功能为用户提供便捷的文件管理服务。每位租户在该平台上有自己的云盘空间,能够将自己的数据上传到自己的云盘,然后在平台上将上传的数据与平台数据整合在同一个表格中做比较,同时也会向租户提供部分商品的短期价格预测。

1.1  基于SaaS模式搭建平台

SaaS是Software-as-a-Service(软件即服务)的简称,是21世纪开始兴起的一种软件应用模式,可以跨地域、跨平台服务。该软件模式有多种特性和优势。

对于服务提供商而言,可以统一对软件进行版本管理,统一版本,统一更新,能够进行多端适配缩短产品上线时间,同时也能够降低维护成本,减小运维压力[4]。

对于用户而言,SaaS方式能够做到开箱即用,只需要在登录网站后即可体验提供商提供的软件服务。相比于传统使用软件的方式,租户省去了研发、部署、运维等一系列繁复的过程,且获得软件的时间和费用成本都大幅度降低。而且租户每次登录到系统上时,就已经获取了最新版本的软件服务,不需要再重新下载、安装、配置,SaaS登录即可体验[5]。

1.2  系统组成

湘西云农平台通过Django开发[6],用户只需要在终端设备登录网站,即可观察到最新的行情变动。具体而言主要由以下3个子系统构成。

1.2.1  数据采集系统

采用Scrapy-Redis分布式爬虫,在多个有关农作物、果蔬信息的垂直网站上进行爬取,再以不同的农作物类型、水果类型建表,解析并存储名称、价格、时间、地名(转换成中国城市编码)、收购价格、批发价格等等,经过清洗后保存在MongoDB中[7],如图1所示。

平台使用Redis作为高速缓存,缓存一些频繁被访问的数据(例如柑橘类信息,全州鲜果类主要作物中,柑橘类占近70%[2]),租户浏览的历史记录等。当租户请求数据时,平台会先从Redis取数据,有则响应返回数据,如果没有的话,就向MongoDB取相应的数据,如图2所示。

1.2.2  數据处理系统

展示数据图表和一些垂直网站上的市场预警信息、求购信息等。将MongoDB中的数据分类,多级菜单,分页展示,使用Echarts展示图表,界面提供多种图表样式可随时替换。租户可以将一些图表收藏(星标)在自己的空间里“我的图表”。

该系统还能为用户提供一个图表转化的功能,主要是可以将选取的系统数据与租户自己上传的数据(Excel或CSV文件)结合在同一个图表中显示,这样比较将能最直观地感受到数据上的变化。同时系统也可以针对部分农作物,根据近年的数据使用ARIMA模型进行短期的价格预测。

1.2.3  文件管理系统

对象存储(Cloud Object Storage, COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。平台通过COS对象存储服务,实现更快的上传、查看、下载文件等操作,如图3所示。COS存储桶空间无容量上限,无须分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。文件管理系统实现多个功能,通过临时密钥上传文件、下载文件、查看文件、删除文件等。

每个租户初始都有一定的云盘空间,可以通过浏览器对自己的文件进行更删改查等操作。

上传文件时,平台会返回一个临时Token作为租户上传文件的凭证,然后上传至COS,上传成功之后返回文件名给平台存储至数据库。

租户也可以在系统上下载Excel文件,依据年份,或者农作物种类/名称,数据类型等选择下载或星标收藏文件。同样先向平台发送下载请求然后平台从COS获取对应的文件内容并返回给租户。

2  实现与部署

开发环境与部署环境均为python3.7、Django1.11.28、docker19.03.5。两台主机,分别为Windows10笔电和树莓派4b Raspbian。

2.1  数据采集部分

使用docker布置多台机器,Scrapy-Redis分布式爬取垂直类网站。为防止爬取速度过快而对网站服务器造成损害,在中间件middlewares.py里设置随机延迟RANDOM_DELAY。

同时为了避免IP被封,还需要创建代理池,如图4所示。由于代理池中的IP有时效性,需要不断被验证:校验器从头部去取IP,一次性取多个IP并使用异步请求(协程处理)进行二次校验,成功的重新添加到List尾部,而使用代理时就直接从尾部取。调度器负责通过调用校验器和添加器对代理IP队列进行循环校验与循环检测,

部分页面解析的回调函数为:

def parse_infoPage(response):

info_list=response.xpath(‘/html/body/div[3]/table//td’)

for cnt,I in enumerate(info_list,1):

rem=cnt%6

if rem==1:

date=i.xpath(‘./@title’).extract_first()

if rem==2:

addr=i.xpath(‘./a/text()’).extract_first()

if rem==3:

fruit=i.xpath(‘./a/text()’).extract_first()

if rem==4:

price=i.xpath(‘string(./p[1])’).extract_first().strip()

if rem==5:

user=i.xpath(‘./a/text()’).extract_first()

if rem==0:

phone = i.xpath(‘./p/text()’).extract_first()

爬取的数据部分展示如图5所示。

2.2  短信验证码的实现

短信验证码功能主要实现两种方法一种是单条发送短信,另一种是批量发送短信。单条发送短信验证码的方法用来实现用户注册、登录、重置密码,而批量发送短信验证码的方法主要用作推广或者广告。该功能核心代码及实现流程为:先注册腾讯云并开通云短信在腾讯云上创建三个短信模板,分别用作“用户注册”“用户登录”“重置密码“三个功能。然后安装腾讯的SDK,pip install qcloudsms_py。

2.3  用户权限及用户额度处理

平台大部分功能只对已注册登录的用户开放,对于未登录的访问者不予以功能服务。设置登录白名单(无须登录就可访问的页面)以实现登录用户与游客的权限划分。

配置文件settings.py中设置url白名单:

WHITE_REGEX_URL_LIST = [

“/register/”,

“/send/sms/”,  #短信验证码

“/login/”,

“/image/code”, #图形验证码

“/index/”,

]

在auth.py中创建中间件AuthMiddleware(),同时将用户信息及其额度信息封装到中间件Vip中:

class Vip(object): # 将用户信息与额度信息封装在vip中

self.user = None

self.price_policy = None

class AuthMiddleware(MiddlewareMixin):

def process_request(self, request):

. request.vip = Vip()

user_id = request.session.get(‘user_id’, 0)

user_object = models.UserInfo.object.filter(id=user_id).first()

request.vip.user = user_object

if request.path_info in settings.WHITE_REGEX_URL_LIST:

return

if not request.vip.user:

return redirect(“login”)    # 否则重定向到登录界面

.

# 免费额度在交易记录中存储

_object = models.Transaction.object.filter(user=user_object, status=2).order_by(‘-id’).first()

current_datetime = datetime.datetime.now()

if _object.end_datetime and _object.end_datetime<current_datetime:

_object = models.Transaction.object.filter(user=user_object, status=2, price_policy_category=1).first()

request.vip.price_policy = _object.price_policy

2.4  文件上传、删除、下载功能的实现

用户上传文件时,会先向django发送请求,然后服务器返回临时凭证,用户才能携带临时凭证上传文件。需要有两个路由,一个用于获取临时凭证,一个用于上传文件,URL为:

url(r’^uploadFile/$’, manage.upload, name=’upload_file’),

url(r’^cos/credential/$’, manage.cos_credential, name=’cos_credential’)

安装一个用于生成臨时凭证的python模块,pip install qcloud-python-sts -U.

COS创建存储桶并设置CORS跨域处理的核心代码实现:

下载文件。用户下载文件分为两种,一种是从自己云盘空间下载,需要从COS端获取,而下载云平台上的公共文件,即从本地数据库获取。下文为从COS端下载文件的核心代码:

def file_download(request, project_id, file_id):

file_object = models.FileRepository.object.filter(id=file_id, project_id=project_id).first()

res = request.get(file_object.file_path)

data = res.content

response = HttpResponse(data)

# 设置响应头

response[‘Content-Disposition’] = “attachment; filename={}”.format(file_object.name)

return response

3  结  论

本文基于Django语言和SaaS模式开发设计一个由数据采集系统、数据处理系统、文件管理系统三个子系统组成的信息服务云农平台,利用该平台的数据整合查询功能以及云盘文件管理功能,为用户提供了大量农产品市场信息以及便捷的文件管理服务,有效地解决了地区农产品市场信息不对称问题,从而有效地提升农产品的销量问题。但是本文算法运行速度较慢,很难满足实时性,未来可以在上述不足之处进行优化,进一步提高本算法的性能。

参考文献:

[1] 湘西自治州统计局.湘西统计年鉴 [R/OL].(2019-11-27).http://www.xxz.gov.cn/zfsj/tjnj_47577/201911/t20191127_1289033.html

[2] 刘钟.现代农业中的数字化信息系统 [D].成都:电子科技大学,2015.

[3] 吕小刚.数字农业推动农业高质量发展的思路和对策 [J].农业经济,2020(9):15-16.

[4] 昌中作,徐悦,戴钢.基于SaaS模式公共服务平台多用户数据结构的研究 [J].计算机系统应用,2008(2):7-11.

[5] 国艳群,韩敏,孙林夫.开放SaaS产业服务平台模型与体系结构 [J].西南交通大学学报,2014,49(6):1068-1072.

[6] 徐秀芳,夏旻,徐森,等.基于Django的校园疫情防控系统设计与实现 [J].软件导刊,2021,20(2):24-30.

[7] 赵宸,刘建华.基于Django的分布式爬虫框架设计与实现 [J].计算机与数字工程,2020,48(10):2495-2498.

作者简介:龙涛(2000—),男,汉族,湖南长沙人,本科在读,主要研究方向:大数据分析处理;通讯作者:谌爱文(1970—),女,汉族,湖南安化人,副教授,硕士,主要研究方向:计算机应用。

猜你喜欢

农业信息化农业现代化
基于本体的农业知识建模研究
咸宁市农业现代化现状及发展对策
“互联网+农业”信息化发展路径探讨
金融对农业现代化发展的影响及对策实证分析
贯彻新的发展理念 促进农业现代化
农业现代化及其金融支持的国际经验
中国特色农业现代化道路的内涵与实施策略研究
农民农业信息化意识现状调查研究