资源描述
第三课时软件的编写帐号 姓名
课前预习:
1、客户端以HTTP协议,诵过GET或者POST的形式提交数据。如/input?id=l&val=22.5,表示有参数,id的值=[,val的值=225 ( P133 )
3、信息系统中的软件开发涉及服务器和客户端程序。逃_结构一般只写服务端程序, 浏览蚩就是客户端程序,使得音隋,更新更加容易;CZS结构服务器端和客户端程序 都要写课堂探究:
1、室内环境实时监测系统的运行过程:
(1) : 1 , 2 , 3处分别智能终端,数据库,浏览器环境僵1>
(2):网站功能页面规划表以及参数(假设服务器主机IP : 192.168.111.104 ,端口为80 )2、代码解读:
访问地址
功能说明
备注
http://192.168.111.104/
主页,显示当前传感器数 据,并实时更新
获取传感器数据,返回当前 数据的情况。1为正常,0 为非正常
参数为id、val
id表示设备号,val表
. 104/get?id=l
以json的格式,返回传感
器id=l的所有数据
http://192.168.111.104/view?id=1
显示id为1的传感器麴居 拆线图
扩展
(1):主页、取得并显示传感器信息(关键语句注释、学过语句填写)
DATABASE = *data/data.db'
app = Flask(_name_)
@app.route(7")
def hello():
db = sqlite3.connect(DATABASE)cur = db.cursor() #创建一个游标对像
cur.execute("SELECT * FROM sensorlog WHERE sensorid =1”) #查找传 感器设备ID值为]的所有记录data = cur.fetchallQ #读取游标cu的所有记录,并返回记录数据 cur.close()
db.close()tempi = data[len(data) -1] #取得最后一条记录
temp=templ[2]#取得温度的值return render_template('view.html‘,data二data,tnmD=temD)#模版渲染
<html>
vtitle>瑞安四中机房7室内环境监测系统</title>
vhl align=”center”>瑞安四中机房室内环境监测系统</hl>
<h2 align="center">当前室内温度:{{temp}} </h2>
<h2 align=”center”>va href=7">刷新v/a>历史数据列表:</h2>
<div id="center" style="border:2px solid #96c2fl">
温度记录时间vbr>
{% for i in data[::-l] %}{{i⑵}}{{i[3]}} <br/>
{% endfor %}
</div>
</html>
(2) 7获取传感器数据并返回当前值是否在正常范围内
@app.route(7input"zmethods=[,POST,z,GET'])
def add_data():
if request.method == 'POST': #如果提交模式为 POST
sensorid = intCrequest.form.qetCid')) sensorvalue= float(reguestform.get('val')) else:
sensorid = intfrequest.args.qetfid1)) sensorvalue= float(request.arqs.qetCvar))
nowtime = datetime.datetime.now() #取得当前时间
nowtime = nowtime.strftime('%Y-%m-%d %H:%M:%S') #日期的格式化为字符串 db = sq I ite3. con nect( DAT ABASE)
cur = db.cursor()
cur.executeC'INSERT INTO sensorlog(sensorid,sensorvalue,updatetime)
VALUES(%dz%fz'%s')" %(sensorid,sensorvalue,nowtime))
mit。
#以上程序的功能为:取得id和val的值并插入到表sensorlog中 cur.execute("SELECT * FROM sensorlist where sensorid = %d" % sensorid) rv = cur.fetchall() cur.close() db.close()
maxrv = rv[0][2] #取得最大阈值
minrv = rv[0][3] #取得最小阈值if sensorvalue > maxrv and sensorvalue < minrv: #超出阈值范围返回方法,请改错 return '1'
else:
return 'O'
(3) :智能终端:向服务器路由提交数据并返回相应的值
from microbit import *
import Obloq
import music
^="192.168.111.104" #WEB 服务器 IP
PORT=,,8Q " #WEB 服务器端口
SSID=" jf 1M #WI-FI 的 SSID
PASSWORD=,,123456 78n #WI-FI 的密码
uart.init(baudrate=9600z bits=8, parity=None, stop=l, tx=pin2, rx=pinl) #串口通讯初始化
while Obloq.connectWifi(SSID,PASSWORD,10000) != True: # 连接中
display.show("..")
display.scroll(Obloq.ifconfig()) #连接成功后显示 IP 地址
Obloq.httpConfig(IPzPORT) # 连接 WEB 服务器上的端口
while True:
t=str(temDerature())#最得自带温度传感器温度值(填空)
putstr="input?val="+t+'&id=r #提交 URL 地址,id
errnozresp=Obloq.get(putstr,10000) #通过Obloq的get方法向服务器提交,最大超时10秒 if errno == 200: #正常提交返回的代码display.scroll(resp) #滚动显示返回的信息
if resp=='l':
music.freq(20000,10000)#长音报警else:
music.freq(20000z 100)短音
else:
display.scroll(str(errno)) #滚动显示返回提交出错的返回的代码
sleeD(1000*5) #延时 5 秒(4):返回JSON格式代码写法 a:JSON的四个函数
函数
描述
json.dumps
将Python对象编码成JSON字符串
json.loads
将已编码的JSON字符串解码为Python对象
json.load
从文件读取json信息并解码为Python对像
json.dump
将Python对象编码成JSON字符串并写进文件
1. py
import json
dictl = ("age": ”12”}
jsonjnfo = json.dumps(dictl) #转换成 JSON 字符串
dict2 = json.loadsQsonjnfo) #转换成 Python 字典
2. py
import json jsonjnfo = ('age': '12') file = open(,l.json'z,w'/encoding='utf-8,) json.dump(json_info,file)
file.close()
file = open(,l.json'/,r,,encoding='utf-8')
info = json.load(file)
print(info)
file.close()b、代码:以json的格式,返回传感器id=l的所有数据
@app.route("/get"/methods=['GET']) #返回 json 格式
def get_data():
sensorid=int(request.args.get('id')) #取得 id 的值
db = sqlite3.connect(DATABASE)
cur = db.cursor()
cur.execute("SELECT * FROM sensorlog WHERE sensorid = %s” % sensorid)
"sensorid":" I".
'value*:(
I
"sensorvalue":"29.0",
■updatetime":"2OI7-O5-27 23:00:34" }.
{
"sensorvalue":"22.1",
"updatelime-:"2017-05-27 22:55:55"
“sensorvalue":"23.2”,
',updateiime-:"2017-05-27 22:50:50" }
1
#从数据库sensorlog表中查询senserid字段的值等于变量sensorid的所有记录(填空) data = cur.fetchall() # dbsum=len(data) #所有记录的长度 dset=《sensorid':str(sensorid)} #字典的第一值 temp=[] for i in range(dbsum): value={) #空字典 value['sensorvalue']=data[i][2] value['updatetime']=data[i][3] temp.append(value)
dset['value']=temp
dison=json.dumDS(dset) #转存为json的字符串格式
return djson
展开阅读全文