1.websocket异常处理

出现上图报错的原因是什么?

原因是:websocket断开了,所以报错

19行接收的msg是None值,所以报错.

打开一个文件,点击发送音乐,出现上面的内容:

客户端app发送的是1,浏览器发送的是2

to_user=toy01

to_user_socket=None

此时,to_user_socket是None里边没有send 方法,自然会报错.

下面,我们会学习一种web断开之后重新连接的一种机制进行处理.

"请确认你的眼神",左右眼

再写一个mbo,注册有现成的我们直接找,就可以了:

我们在body里边写入注册框:

我们需要在index.html里边的设置写上一个id

下面我们再写一个,绑定页面.,这个时候,需要绑定两个页面

下面进行判断一下:

2.注册+登录+自动登录

玩具有一项开机自检的功能非常的强悍.是授权就可以,不授权就不可以.

下面,我们开始写一个登录页面,login.html,清空,写代码块md,

因为是一个主界面,所以,我们不能够带箭头,因此选择mhe代码块中不带箭头的内容

写完之后,我们保存一下,进行同步,但是我们需要点击"设置",进入"login页面"但是目前,我们点击设置"是没有反应的

这个时候,我们通过打印进行测试一下:

保存一下:

上边的extras去掉:然后保存一下:

重启启动程序:

这个时候,点击设置,出现跳转不过去.也就是localStorage里边是有值的,我们跳转不过去,只能在前端打印上边的内容11111

我们需要清空掉上边的内容:

先写一个清空命令,保存一下,这个时候,再注释一下这个清空命令,一直点击"这个设置",没有出现界面,原因是没有保存login.html页面.

我们现在在上图的界面,再点击"返回",正常是直接退的,但是现在返回的是home页面

我们可以在login.html写一个重新返回的函数为空,这样就按返回键,就什么都不能返回了.

这个时候,我们再点击"返回",已经返回不了原来的home界面了

我们只能点击首页,但是现在我们可以在首页加上一个id,

我们在上边,先加上一个home,然后绑定一个事件:

先写一个dga,再写一个mop

这个时候,我们就可以在"首页"和"设置"之间来回切换了,但是存在的问题是,"速度可能会慢一些"

问题:在home页面也存在返回,就返回到了登录页面,因此我们再home页面也是需要做一下处理的.

back,只要是主菜单都是需要用这个内容的.

这个时候,点击"返回"就不能再返回了

先修改一下快捷键:"工具"=>"选项"

下面,搜索"快捷"

我们将整理修改成Ctrl+Alt+L

python学完之后,有点强迫症,下图中加上id

上面,我们再写绑定事件:

reg是子页面,这个时候,我们需要再次新建一个注册页面:

md代码块,mhe代码块选择"带箭头的代码块"

title="注册用户"

下面我们再写一个body

这个就是我们事先注册页面的功能:

下面,我们再在注册页面里加上注册框,

下面再写一个昵称和性别,性别是需要选择的

我们查看一下单选框:

单选框代码块是mra,选择第二个

因为性别是单选框,我们需要写两个选择其中一个:

保存,这个时候得到下图的效果:

app过审,需要不能直接写男和女,苹果需要审查

我们可以通过下图的方式,实现数据的获取

下面,我们写注册之后能拿到的内容:

注意,下面的性别的取法是有一点点不同的,定义的越多,拿到的越多,并且需要通过for循环来拿这个

mdt代码块

下面,我们再服务端新建一个user.py

套用content.py里边的信息,将内容写在下面的位置

下面,我们再在manager.py里边导入user.py

这个时候manager.py已经挂掉了,但是我们可以继续添加内容进行处理,,导入flask里边的request请求

点击"注册",后边服务端,没有收到任何消息

没有收到消息是后端没有开启运行,,开启之后,我们再次点击"注册",下面是服务端收到的消息

上图是一些内容

这个时候,我们可以看一下数据,登录NoSQL客户端:

连接之后,点击刷新一下,得到下面的内容

很明显,上边的密码是不够安全的,因此我们需要进行密文处理一下

首先,我们将下面的username,复制到"搜索"里边,然后情况下面右下角里边的内容:

右击,移除文档,点击"OK"

我们在后端加MD5,进行处理比较容易

下面的这个博客可以利用下面的加密方式进行处理

我们先点击,上边的"下载MD5压缩包"

我们得到上边的内容是,md5.js

我们只需要两部,一步导入,一步添加加密

第一步就是导入

下面,我们保存一下,再次注册一遍:

再次点击"注册",

这个时候,我们在mongodb里边看到的是密文:

下面,我们需要,点击注册之后跳转到的不是login页面,应该是登录状态,下面我们需要再写一个监听事件

我们现在写这个url,有点费劲,我们希望可以实现这个不要这么麻烦,在配置文件里边配置一下:也就是我们看到每个页面都要加载mui.init

也就是说,我们让整个项目都可以使用这个

下图是修改之后的位置:

下面是,进行处理,

我们得到上边的内容:

为什么写app01?, 我们看起来是个死的,实际上是个动态的参数,前面有个ws

下面,我们再login登录界面进行添加,用户和密码的id

下面,我们再在后端写一个接口

复制,上图红框内的内容:

再次启动服务端:

在注册页面输入信息,

我们得到下面的信息

下面我们进行判断一下:

下面,我们再新建一个user_info.html信息

为什么写不带箭头,因为和这个不确定是"用户信息",还是"登录login"页面

这样,我们就将用户信息传递到user_info.html界面了

这个时候,我们得到下面的信息:

如果缓存存在,就打开用户信息这个界面:

下面,我们就可以传递值user_info

extras可以传递值user_info

下面我们再在user.py里边再写一个auto_login

注意,要及时保存,退出,再次登录,点击"设置",我们可以看到下图中的信息:

下面我们需要在user_info.html里边拿一点东西

在上图中加上var处理

注意:_id都应该是小写的形式

上边一直出不来这个用户信息???

经过我反复找错误,最后终于出来了

3.user_info&&toy_manager

下面,我们写一个图文列表:

删除或者注释掉上边红框的内容:

我们再来一个图文列表:

mli,图片居左:

mbo代码块里边的mli,选择第三个,我们看到下面的效果:

只留下一个:

得到下图的结果:

下面,我们就显示"图片","昵称",以及真实姓名

下面我们再app基础上建立一个图片文件avatar

将两张图片放在avatar里边

下面我们修改下面的内容:

下面我们看一下app里边的显示效果:

下面,我们再写一个登出

修改成红色,并且id="logout"

下面,我们再写一个登出的事件,要清除缓存的内容

管理玩具通畅也需要写在"用户信息"这个页面

添加一个"普通"列表:

我们只需要留一个li标签就可以了

我们要加上一个图标,否则太单调了

上图中的icon有图标

保存,我们就可以看到下面的效果了

我们可以,在点击管理的时候,直接跳转到玩具页面:

下面,我们再绑定一个事件:

dga代码块,打开一个新的页面:

因为是子页面,因此不需要style了

下面,我们再写一个toy_manager.html页面:

清除,然后mdo代码块

写一个带返回箭头的mhe:

下面,我们再写一个图文列表mli,图片居左的

只留一个就可以了

感觉还是有点不好看,我们再改变一下:

新建一个文件images,放在images里边:

4.创建二维码

我们可以通过程序的每个编号生成一个唯一的二维码进行处理:

我们通过程序对接二维码,然后进行处理,进行着批量处理的过程

通过二维码API进行处理:

使用这个"联图二维码"

http://qr.liantu.com/api.php?text=

在上边连接后边加上数字可以生成唯一的二维码

下面,我们再在后端写一个QRcode.py进行处理

下面通过requests模块进行一些测试:

我们可以得到一个200的响应

print(res.content),打印出来的就是流,下面,我们将这个流写入到文件里边:

下面我们需要配置一下"联图二维码"的配置.

我们需要将转化之后的二维码保存一个文件夹内:新建一个QRCode文件夹

写完之后,我们还想存储到数据库中

,最后我们再写入到mongodb里边

QRcode.py代码如下

# Author: studybrother sunimport requestsfrom settings import LT_URL,QR_PATH,MONGODBfrom uuid import uuid4import time,hashlib,osdef create_QR(num):    qr_li=[]    #创建一个空列表    for i in range(num):    #通过循环创建多个玩具        qr_info=f"{time.time()}{uuid4()}{time.time()}"        qr_code=hashlib.md5(qr_info.encode("utf8")).hexdigest()        res=requests.get(LT_URL % qr_code)        qr_img=os.path.join(QR_PATH,f"{qr_code}.jpg")        with open(qr_img,"wb")as f:            f.write(res.content)        qr={"device_key":qr_code}   #将字典放在列表中        qr_li.append(qr)   #每次写完添加一次        time.sleep(0.12)    #加入时间,是因为可能qps超标    MONGODB.devices.insert_many(qr_li)#设备信息devicesif __name__ == '__main__':    create_QR(10)   #下面测试一下

运行:

链接已经发生了改变

问题是有很多隐藏的bug,需要一点点挖掘

这个时候,链接已经有了图片对应 :

清空原来的数据,再次运行,得到下面的10条数据在MongoDB里边

5.扫码页面低版本

下面我们找一下H5plus,找一下扫描二维码的功能

上边的信息,看不太懂,"方法什么的",主要是,

从最简单的入手解决问题,现在我们要"跳转到新页面"

创建一个qr_scan,二维码扫描.情况,mdo代码块

mhe肯定是带箭头的

下面,我们需要绑定事件进行处理

下面我们再写事件

点击"扫描绑定玩具"得到下面的界面

看一下这个create

id是必填项

我们从案例中找到具体的内容

直接覆盖原来的代码:qr_scan.html

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>Barcode Example</title><script type="text/javascript" >
// 扩展API加载完毕后调用onPlusReady回调函数
document.addEventListener( "plusready", onPlusReady, false );
// 扩展API加载完毕,现在可以正常调用扩展API
function onPlusReady() {var e = document.getElementById("scan");e.removeAttribute( "disabled" );
}
var scan = null;
function onmarked( type, result ) {var text = '未知: ';switch(type){case plus.barcode.QR:text = 'QR: ';break;case plus.barcode.EAN13:text = 'EAN13: ';break;case plus.barcode.EAN8:text = 'EAN8: ';break;}alert( text+result );
}
function startRecognize() {scan = new plus.barcode.Barcode('bcid');scan.onmarked = onmarked;
}
function startScan() {scan.start();
}
function cancelScan() {scan.cancel();
}
function setFlash() {scan.setFlash();
}</script><style type="text/css">
*{-webkit-user-select: none;
}
html,body{margin: 0px;padding: 0px;height: 100%;
}
#bcid {background:#0F0;height:480px;width:360px;
}</style></head><body ><input type='button' οnclick='startRecognize()' value='创建扫码控件' /><input type='button' οnclick='startScan()' value='开始扫码' /><input type='button' οnclick='cancelScan()' value='取消扫码' /><input type='button' οnclick='setFlash()' value='开启闪光灯' /><div id= "bcid"></div><input type='text' id='text'/></body>
</html>

View Code

这个时候,我们可以看到上边的界面:

下载这个软件,实现电脑和手机之间的连接

手机链接上之后,发生的变化:

一直没有和手机连接成功,原因可能是wifi的问题,用自己的电脑开启wifi,可以成功了.成功扫码了.

(一个晚上过去了)

上边的ApowerMirror是一个可以投影的软件,但是,输入密码,自己会变黑,防止密码泄露

.

6.扫描二维码&&数据校验

这个时候,我们就可以扫码进行处理了,可以得到

下面,我们想要修改一下二维码的样式,改成mui相关样式

在app里边新建一个scan,md代码块,mhe(带箭头的代码块)

下面,我们找一下这个qr_scan示例代码以及事件:

将上边的两行代码,都放在scan.html里边:

这个时候,我们玩具管理,跳转到scan.html页面里边:

点击,扫码,出现下图的错误:

我们应该写在mplus里边写

修改之后,出现上图中的错误:

注释上边这一行

查看一下原来程序中的源码:

我们追加到scan里边:

放开注释行:

源码中有一个bcid

我们将源码,放在图示位置:

bcid有高宽,我们需要自己定义:

只有限制二维码大小才行

这个时候,二维码,才能开始扫码

我们可以先删掉图示的位置:

反正也看不懂,先删掉

我们直接打开,这个结果::

扫完码,底部就可以出来内容了

toast也就是一种提示框的意思:

我们想要的效果,是扫完之后,关闭扫描页面,

添加上图的mui.back();代码之后, 这个时候扫描二维码,跳转到一开始的界面:

我们需要鉴定,是不是我们数据库中的二维码,这个时候才会有价值,下面我们再后端进行再在serv里边创建一个py蓝图文件

我们可以,套用user.py里边的信息

下面开始发送数据在前端:

这个时候,我们需要在后端的manager里边将蓝图注册一下蓝图

修改完成后,我们随便扫一个码,看一下前端app能不能打印出内容:

这样既可以扫描成,也可以扫描失败了

现在,我们不想每次都扫码,先每次给一个值处理

注释,并且保存这个吗,以后扩展,再打开

这个时候,我们再扫码,就会永远扫码成功

上图是,我们再打印消息

这个时候,我们开始可以扫码了

7.绑定玩具

扫码成功该干什么?

下面,我们开始绑定一个玩具

新建一个bing_toy.html

我们需要在第二个框,里边写上注册框,在login.html里边拿现成的就可以了

下面我们再刚才的scan.html里边扫码成功就开启

这个时候,我们点击扫码,可以打开下图

下面,我们再修改一下绑定事件:

post,要么是发送请求,要么是打开新窗口,这两种方式:

下面,我们传递数据,下图是bind_toy.html页面

下面,我们再写后端的界面:

下面,我们再在devices.py里边写绑定玩具

拿到玩具信息,并且再加上一些信息

我们的目的,就是,更方便的操作后端信息:

下面,保存,运行,开始扫码:存在一点问题:

删除上图的代码:

这个时候,扫描可以出来正确的"创建你的玩具了"

输入上边的内容,点击"绑定创建玩具"

这个时候,我们看到"服务端请求成功了"

找了半天错误,最后前后端都重新启动变好了,上图是传递回来的数据

我们绑定之后应该显示,绑定几个显示几个

toy.jpg

我们将下载的图片放在,avatar里边

我们需要只要一点击进入这个"toy_manager.html"里边,就能拿到玩具列表

下面,我们还是需要在devices里边写一个接口:绑定的玩具列表

注意上图的第32行

下面,再做一下修改

我们拿到"源源",怎么处理这个数据?

我们需要添加一个图文列表和id

我们再home页面中,创建过一个类似的页面:

这个创建内容的,大的函数

我们将这个函数放在toy.manager.html页面的script的上边

我们需要将下图的这个位置注释掉

修改上图的形参为toy_info

上边玩具名,下边宝宝名字,左边是玩具的头像

写完之后,我们需要将列表进行for循环一下:

这个时候,我们重新启动,并且重新登录,看一下能不能出来结果:

由此,我们可以得到结果,注意下图的位置不要写错了

修改成圆形的图片:

这个时候,就变圆了,如果绑定完成,我们需要跳转到一个页面:

下面,我们再次绑定一个玩具,看一下效果

上一个,我们选择尾号的是9b,下面我们选择5a

点击绑定创建玩具,得到下面的内容

其实绑定逻辑里边还有一个逻辑,那就是添加好友的逻辑

8.玩具开机

现在我们启动玩具,只要玩具已启动就能访问websocket,

上图中的websocket并不是玩具id连接上的

上图显示的是我们创建的两个玩具

我们需要用859e进行连接

我们想要通过key,拿里边的_id的值

下面,我们再看一个隐藏的需求:

下面,我们希望合成上边的三句话:

我们用一下第六天的内容,文本转声音文件:text2audio.py

打印出流和mp3文件:

我们再合成一个NoBind.mp3文件:

生成第三句话

最后,我们将生成的文件,放在music文件夹里边

下面,我们将玩具只要一开机,我们执行一个视图函数:

我们先将,下面的几行先注释掉:

下面,我们写一个按钮,开机

下面,我们再写一个函数

下面,我们再在后端新建一个静态文件:static,把jquery文件放在里边

下面我们再发送信息,通过ajax,这里是$post

我们通过"火狐浏览器进行发送信息"

我们先放一个正确的device_key

点击"开机",在控制台中打印出了Success.mp3

现在我们想要播放出来

这个时候,我们再次点击开机:要先刷新一下浏览器才行

下面再找一个授权的但是没有绑定:

下面的是一个没有授权的地址:

科大讯飞的合成工具很NB的

点完开机,我们就应该去连接,那么我们拿什么去连接呢?我们应该拿玩具的id进行连接

线面我们再在devices.py里边写一个玩具的id,当玩具传递成功之后.

在火狐浏览器中,先输入一个错误的id

没有绑定的地址:

下面,我们用正常的值进行处理

这个时候,我们得到正确的结果:

这个时候,我们断开ws_serv.py,重新连接,

有可能随时导致服务器崩盘,我们如何让用户无感知的连接:

websocket有断开重连机制,

重启ws_serv,这个时候再次连接浏览器

但是,这个时候ws依然可以访问成功,见下图:

这个就是断开重连机制.

我们断开ws_serv,

浏览器,也就是硬件端,也就在很慢的建立连接,其实很难达到递归深度,只要我们再次连接就可以了

这个时候,我们就可以重新建立连接了

其实这个递归是有坑的,我们如果新建一个,就会变成一个新的,就不好时了,因此我们用递归可以避免这个小坑.

这个递归,也就是websocket重连机制.

9.AppWebsocket断开重练&&MuiFire调用WS事件.

下面我们让用户也使用websocket机制进行处理.下面测试,我们用夜神

我们想要用户一登录app,就可以连接websocket,随时保持用户和服务器之间连接

我们将websocket页面写在index界面比较合理

下面我们叫它一上就连接上

我们看到上图是在登录.

登录成功,应该如何处理呢?

下面,我们发歌,怎么发呢?

我们想要区分玩具发送,明天处理.

我们现在处理,随便给一个发送"小粪球",这个分地方先写死

我们先用5a对应的id  5cc070f027c41e4d8891fe52

下面,我们再用fire时间进行处理:

打包之前一定要替换

下面,我们在最后进行监听一下:

 渡尽劫波兄弟在,相逢一笑泯恩仇!完工

重启前后端项目,浏览器端先放入玩具的device_key,HBuilder放_id信息

下面,我们做一下区分一下:

下面,我们在传递一下;(这个是专门针对浏览器进行的操作)

虽然与实际业务没有什么关系,但是目的就是做好区分工作

再次开机,输入下面的内容

d056b7666e43bf1b4e19b3d9b4552b5a

转载于:https://www.cnblogs.com/studybrother/p/10751561.html

巨蟒python全栈开发flask10 项目开始2相关推荐

  1. 巨蟒python全栈开发flask11项目开始3

    1.多玩具遥控&&websocket回锅 2.绑定玩具时添加好友的最终逻辑 3.消息&&好友列表 4.chat聊天&&对话窗口 1.多玩具遥控& ...

  2. 巨蟒python全栈开发-第11阶段 ansible_project2

    一个NB的网站: https://www.toolfk.com/ CDN:将用户的需求送到最近的节点:内容分发网络 有些是专门做CDN的工具 常用的markdown是需要知道的,短信有字数限制. we ...

  3. 巨蟒python全栈开发-第11阶段 ansible_project1

    今日大纲: 1.前端页面介绍 2.发布流程 3.需求分析 4.表结构设计 5.前端页面设计 昨日内容回顾: 1.roles - tasks- handlers- files- templates- v ...

  4. 巨蟒python全栈开发flask8 MongoDB回顾 前后端分离之H5pycharm夜神

    1.MongoDB回顾 1.启动 mongod - 改变data/db位置: --dbpath D:\data\dbmongod --install 安装windows系统服务mongod --rem ...

  5. python点击事件onclick_巨蟒python全栈开发数据库前端6:事件onclick的两种绑定方式onblur和onfocus事件window.onload解释小米商城讲解...

    1.回顾上节内容(JavaScript) 一.JavaScript概述 1.ECMAScript和JavaScript的关系 2.ECMAScript的历史 3.JavaScript是一门前后端都可以 ...

  6. 巨蟒python全栈开发-第10天 函数进阶

    一.今日主要内容总览(重点) 1.动态传参(重点) *,** *: 形参:聚合 位置参数*=>元组 关键字**=>字典 实参:打散 列表,字符串,元组=>* 字典=>** 形参 ...

  7. 巨蟒python全栈开发-第6天 is==

    1.小数据池 2.id 3.decode和encode 小数据池 #小数据池:不要死磕就行#python为了简化,搞出来的一个东西 ID (1)# id()函数可以帮我们查看一个变量的内存地址# a= ...

  8. python123蟒蛇代码_巨蟒python全栈开发-第3天

    1 今日作业 1.有变量name = "aleX leNb" 完成如下操作: #1)移除 name 变量对应的值两边的空格,并输出处理结果 '''''' '''# name = & ...

  9. 巨蟒python全栈开发-第12天 生成器函数 各种推导式 yield from

    一.今日主要内容总览(重点) 1.生成器(目的:帮助我们创建对象) (1)生成器的本质就是迭代器 (2)一个一个的创建对象 (3)创建生成器的方式: 1.生成器函数 2.通过生成器表达式来获取生成器 ...

最新文章

  1. html 样式的几种实现方法
  2. Dialplan 编程基础
  3. kdj指标主要看哪个值_什么是KDJ?KDJ指标如何使用
  4. 常用的分布式事务解决方案介绍
  5. 1061 判断题 (15 分)
  6. 服务器基线加固脚本_Linux 基线检查,安全加固脚本
  7. 基于Matlab的跨孔CT胖射线追踪算法(二)
  8. 网盘大战-各网盘使用测试
  9. 算法-两个排序数组的中位数
  10. Solr数据库6.3.0版本配置问题:whose UTF8 encoding is longer than the max length 32766
  11. 2015年蓝桥杯省赛C++(A组) 第三题 奇妙的数字
  12. 手机号码归属地查询API
  13. HDU-1863 畅通工程
  14. WR720N改造记录1
  15. 实现你人生中的第一个jQuery插件
  16. 完善circos做图
  17. 安卓屏幕坏了怎么把资料拷出来_选择苹果还是安卓呢?(老安卓转苹果11用户体验)...
  18. MVC |分部视图 PartialView()
  19. JAVA基础----终弄清java核心技术卷1中的int fourthBitFromRight = (n 0b1000 ) / 0b1000;是怎么回事了。。。
  20. Python实现课堂随机提问并语音播报学生姓名

热门文章

  1. 电商卖家私域成本核算:结合案例,深度解析私域流量为店铺节省多少新获客成本?...
  2. 【POJ 1723】SOLDIERS(排序、中位数)
  3. 如何修改gnome evince 文档查看器的设置
  4. Input stream not found at: net/sf/jasperreports/fonts/dejavu/msyh.ttf的解决方法
  5. 金三银四面试必问:AQS了解吗?
  6. 在时光深处,聆听一段光阴的故事
  7. 微信小程序 更新版本操作
  8. matlab中sum怎么用,Matlab中求和函数sum的使用示例
  9. 江西省电子专题大赛考点讲解五:CD4081四2输入与门
  10. 若依开源项目搭建自己的后台管理服务