APP下载

基于Python Flask的手机与PC服务器通信

2018-04-09长江工程职业技术学院武汉430212

长江工程职业技术学院学报 2018年1期
关键词:文本框视图路由

(长江工程职业技术学院,武汉 430212)

移动通信技术的讯猛发展,催生了移动互联网应用成井喷式的增长。根据Zenith Media的研究,到2017年,移动互联网流量将占互联网流量的比例将达到75%,占有互联网的绝大部分业务。皮尤报告显示,2017年中国大陆地区智能手机拥有量为8.6亿部。由于移动互联网终端设备小巧轻便,通信便捷的特点,使基于以智能手机为代表的移动应用几乎无处不在,各种APP可谓是呼之欲出,特别是各种基于手机的远程控制、远程数据交换的应用业务要求极速递增,实现这些移动应用业务的关键是解决智能手机与PC服务器之间的通信问题。对于Andriod平台,惯用方法是通过Java Scoket来实现,程序设计相对较为繁杂,本文利用 App Inventor的客户端浏览器组件与 Python Falsk架构的Web服务器实现了手机与PC间的双向数据通信,方法简单,易于实现。

1 通信平台简介

Android智能手机端采用App Inventor工具设计客户应用App,PC端使用Python语言第三方提供的Flask模块,通过Pip安装后设计服务器程序(其它网站可通过设计Web API方式通信),利用Flask的路由和视图函数实现数据的双向传输。

1.1 App Inventor

App Inventor是由Google公司开发的一款在线开放的Andriod编程工具软件,内嵌了若干传感器组件,可以直接调用设备的功能,比如位置传感器、加速度传感器、方向传感器、手机的拨打电话及收发短信功能[1]。通过图形化积木式拖放组件的编程方式来完成Apps开发。 App Inventor在2012年移交给麻省理工学院的MIT的行动学习中心,并由MIT发布使用,目前发布了第2版本。App Inventor提供了以图形化表示的常量、变量、自定义过程(函数)、组件和事件处理等编程元素,采用面向对象编程方法,其App结构如图1所示。

图1 AppInventorApp结构

1.2 Python Flask Web

Python语言近些年越来越火,其特点是开发迅速,语法简单,可移植、网络资源丰富等。Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2,Flask自带开发用服务器和debugger、集成单元测试 (unit testing)和RESTful 调度请求[2]。Python利用Flask开发RESTful API,主要由路由和视图函数组成资源,路由提供URL定位资源,实现网址到资源的映射,视图函数则是实现通过Get或Post方法传递通信参数(命令)对应的API处理单元,客户端通过路由调用API实现数据的存取,数据通常为JSON形式作为响应,REST API设计与工作模式如图2所示。

图2 RESTAPI设计与工作模式

2 通信系统设计

手机要通过移动接入网连接到互联网,也可通过WiFi实现手机与局域网内PC通信。通信协议为Http,分别由客户端的Web组件和服务端的Flask对协议进行了封装,开发者只需按通信约定格式进行程序设计,其通信过程如图3。

图3 客户端与服务器通信过程

2.1 手机端通信设计

手机端APP使用App Inventor的Web客户端组件,该组件的使用HTTP协议,提供了Get、Put及Post方法,实现与网络服务之间的信息交换。Web组件的Url属性指向服务器的网址,调用Web组件的Get、Put或Post方法发送请求,当请求成功有数据返回时,触发收到数据事件(Event),在事件处理程序中对收到的数据进行处理[3],程序流程如图4。

图4 手机端流程图

2.2 PC端通信设计

Flask是第三方提供的用Python开发Web应用的具有MVC架构的一个框架,它内置了简单的WSGI服务器,通过封装的Request和Response两个对象进行请求/响应操作,从而实现双向通信,服务器设计严格按照图5流程进行。图6为客户请求的响应过程。在Flask的应用中,路由是指用户请求的URL与视图函数之间的映射。Flask框架根据HTTP请求的URL在路由表中匹配预定义的URL规则,找到对应的视图函数,并将视图函数的执行结果返回WSGI服务器。

图5 服务器程序设计流程图

图6 Flask响应客户的请求过程

3 通信系统实现

为说明通信的实现方法,下面以手机APP的文本框作为命令参数,命令按钮发送请求,接收数据在文本框中显示为例进行APP和服务器程序设计。

手机APP程序如图7所示,程序分别由“发送请求按钮”和“Web客户端1”两个事件处理程序组成,在发送请求按钮事件中通过字符串合并操作,将服务器的网址与命令参数合并为Uul,以调用对应的视图函数,再发向服务器发送GET请求,当有数据返回时,触发“Web客户端1”获得文本事件,在该事件中,读取响应内容,存入“返回数据”文档框中显示。

PC服务器端的实现代码如下:

form flask import Flask #导入Flask

app = Flask(__name__) #实类化Flask

@app.route('/') #路由

def welcome():#视图函数

return "Welcome to use mobile communication"

@app.route('/api1')

def api1():

return "This is data of api1"

@app.route('/api2')

def api2():

return "This is data of api2"

app.run(host="192.168.1.1", debug=True) .#启动服务器

图7 手机端App程序

运行APP,在命令参数文本框中输入“api1”,单击“发送请求”按钮,在返回数据文本框中收到“This is data of api1”信息,同样,输入“api2”时,在返回数据文本框中收到“This is data of api2”,手机APP运行如图8。当单击“发送请求”按钮时,向服务器发送的请求为http://192.168.100.1/api1?,服务器收到后查路由表,找到对应的视图函数api1()并执行,由return返回数据,在手机端触发收到文本事件,在事件过程中进行相应的数据处理。

4 结束语

在利用App Inventor和Python Flask设计手机与PC通信时应用时,数据可以是各种格式,也可以是文件,视数函数中根据应用需要,可以包括对数据的各种操作及数据库处理。如果返回数据较复杂,可以考虑JSON格式,在手机端使用列表来解析数据。

图8 手机App运行结果

参考文献:

[1]邵瑛.App Inventor2应用开发[M].北京:高等教育出版社,2016.

[2]Miguel Grinberg.Flask Web开发:基于Python的Web应用开发实践[M].北京:人民邮电出版社,2017.

[3]David Wolber. App Inventor 编程实例及指南 [EB/OL].https://web.17coding.net.

猜你喜欢

文本框视图路由
巧用文本框实现PPT多图片排版
PPT文本框的另类应用
探究路由与环路的问题
5.3 视图与投影
视图
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
文本框酷变3D效果
PRIME和G3-PLC路由机制对比
WSN中基于等高度路由的源位置隐私保护