HBuilder创建app
一.app登录注册实现
1.首先进行布局,mhead,mbody 在app index.html内创建一个 a链接通过mui.openWindow跳到登录页面
<a class="mui-tab-item" id="self">
<span class="mui-icon mui-icon-gear"></span>
<span class="mui-tab-label">个人中心</span>
</a>
openwindow:
mui.openWindow({
url: "login.html",
id: "login.html",
styles: {
top: "0px",
bottom: "50px"
}
})
进入登录页面后,为了不让用户返回,使用mui.back()进行限制
mui.back = function(){ #或mui.back()
mui.toast("当前页面不能返回");
};
简单的进行输入用户名和密码,向后端信息交互,进行验证,当验证通过时,进入用户信息页面userinfo.html
<script src="js/md5.js" type="text/javascript" charset="utf-8"></script>#需要下载md5()加密,引入
document.getElementById('login_btn').addEventListener('tap',function () {
mui.post(window.serv + '/login',{
username:document.getElementById("username").value,
password:hex_md5(document.getElementById("password").value) #为了信息安全前端将密码加密 hex_md5()
},function(data){
console.log(JSON.stringify(data));
if(data.code==0){
window.localStorage.setItem("user",data.data._id);#这里注意,使用的是window.localStorage.setItem(Key,value)
#进行全局创建,将用户信息user表中的obj(_id)作为值传过去,对我们查找用户信息有很大帮助
// console.log(window.localStorage.getItem("user"));
mui.openWindow({
url:"userinfo.html",
id:"userinfo.html",
styles:{
top:"0px",
bottom:"50px"
},
extras:data.data,
createNew:true #这里是当访问发回后,刷新页面,为了信息实时沟通 createNew:true
})
}
},'json'
);
})
关于注册
注册和以前一样,获取数据发送数据的过程,这次加入了单选 我是爸爸或我是妈妈
<div class="mui-input-row mui-radio mui-left">
<label>我是妈妈</label>
<input name="gender" type="radio" checked value="">#checked 默认选择
</div>
<div class="mui-input-row mui-radio mui-left">
<label>我是爸爸</label>
<input name="gender" type="radio" value="">
</div>
在判断性别上,用到了判断获取value
function () {
var gender_list = document.getElementsByName("gender");#在获取性别上,通过document.getElementsByName进行判断,因为当选择时,checked就
#会在哪一个单选框
var gender = null;
for (var i = 0; i < gender_list.length; i++) {
if(gender_list[i].checked){
gender = gender_list[i].value;
}
}
进入userinfo 用户中心页面
var Sdata = null;
mui.back = function() {
};
mui.plusReady(function () {
Sdata = plus.webview.currentWebview();
console.log(JSON.stringify(Sdata));
var index = plus.webview.getWebviewById("HBuilder");#将login.html中用户的信息通过mui.fire传递到index.HTMLAllCollection
#目的在用户已经登录的情况下,不在重复登录,直接进入到userinfo页面
mui.fire(index,'new_ws');
document.getElementById("avatar").src = "avatar/" + Sdata.avatar;#赋值
document.getElementById("nickname").innerText = Sdata.nickname;
document.getElementById("username").innerText = Sdata.username;
});
document.getElementById('logout_btn').addEventListener('tap', function() {
window.localStorage.removeItem("user");#退出登录移除window.localStorage.removeItem("user")
mui.openWindow({
url: "login.html",
id: "login.html",
styles: {
top: "0px",
bottom: "50px"
}
});
})
document.getElementById('scan').addEventListener('tap',function () {#进行调用扫码页面,进行扫描二维码
mui.openWindow({
url:"scanQR.html",
id:"scanQR.html",
})
})
以上步骤简单的登录注册就差不多完成了,最后用户登录不在重复登录
index下验证window.localStorage.getItem("user") 做判断
document.getElementById('self').addEventListener('tap', function() {
if(window.localStorage.getItem("user")) { #哈哈,window.localStorage.getItem("user")终于用上了,当在用户登录后,会全局存在localStorage,这也是
#进行判断的重点
mui.post(window.serv + '/auto_login', {
"_id": window.localStorage.getItem("user")
}, function(data) {
console.log(JSON.stringify(data));
mui.openWindow({
url: "userinfo.html",
id: "userinfo.html",
styles: {
top: "0px",
bottom: "50px"
},
extras: data.data#在检测到"user" 后,进行登录验证,若存在,则将全部数据返回,并传到userinfo,
#在userinfo将标签一一赋值
})
}, 'json');
} else {
mui.openWindow({
url: "login.html",
id: "login.html",
styles: {
top: "0px",
bottom: "50px"
}
})
}
});
关于登录websocket的app 名字
index.html
if(window.localStorage.getItem("user")) {#注意,也可以将localStorage作为appname 登录的
ws = new WebSocket("ws://192.168.13.55:3721/app/" + window.localStorage.getItem("user"));
};
document.addEventListener("send_music", function(data) {
var send_str = data.detail // {to_user:"toy123",music:Sdata.audio}
ws.send(JSON.stringify(send_str));
});
document.addEventListener("new_ws",function(){ #这里监听的是userinfo传来的new_ws
ws = new WebSocket("ws://192.168.13.55:3721/app/" + window.localStorage.getItem("user"));
})
调用联图接口生成二维码
import requests,os,time,hashlib
from uuid import uuid4
from setting import music_path,photo_path,MongoDB,LT_URL,QRCODE_PATH
# LT_URL="http://qr.liantu.com/api.php?text=%s" 调用联图接口生成二维码,值为qr_code
def create_QR(count):
qr_list= []
for i in range(count):
qr_code = hashlib.md5(f"{uuid4()}{time.time()}{uuid4()}".encode("utf8")).hexdigest()
res =requests.get(LT_URL%(qr_code))
qr_path = os.path.join(QRCODE_PATH,f"{qr_code}.jpg") with open(qr_path,"wb") as f:
f.write(res.content) qr_dict ={"device_key":qr_code}
qr_list.append(qr_dict)
time.sleep(0.5) MongoDB.user.insert_many(qr_list) create_QR(10)
HBuilder创建app的更多相关文章
- HBuilder创建app 基础
一.了解HBuilder HBuilder内封装了大量的书籍,极大方便了使用 官方文档: http://dev.dcloud.net.cn/mui/ui/ 关于布局: mhead 表头.mbody ...
- HBuilder创建app 3
一.Audio 模块实现开启手机摄像头 基于html5 plus http://www.html5plus.org/doc/zh_cn/audio.html 栗子: <!DOCTYPE html ...
- springboot+layui实现PC端用户的增删改查 & 整合mui实现app端的自动登录和用户的上拉加载 & HBuilder打包app并在手机端下载安装
springboot整合web开发的各个组件在前面已经有详细的介绍,下面是用springboot整合layui实现了基本的增删改查. 同时在学习mui开发app,也就用mui实现了一个简单的自动登录和 ...
- Hbuilder开发app实战-识岁03-文件上传
前言 做app不得不谈的问题就是文件上传.用hbuilder开发app让上传变的非常easy. Uploader Uploader模块管理网络上传任务,用于从本地上传各种文件到server,并支持跨域 ...
- HBuilder开发App教程06-首页
实战 前面几节基本是一些概念的普及, 正如前面提到的,本教程会以滴石作为范例进行解说, 有兴趣的能够先行下载体验一下.或者下载源代码研究下. 新建项目 打开HBuilder,在项目管理器中右键--新建 ...
- CASE函数 sql server——分组查询(方法和思想) ref和out 一般处理程序结合反射技术统一执行客户端请求 遍历查询结果集,update数据 HBuilder设置APP状态栏
CASE函数 作用: 可以将查询结果集的某一列的字段值进行替换 它可以生成一个新列 相当于switch...case和 if..else 使用语法: case 表达式/字段 when 值 then ...
- HBuilder开发App教程05-滴石和websql
滴石 介绍 滴石是用HBuilder开发的一款计划类app. 用到HBuilder,mui.nativejs以及h5一些特性. 预期 眼下仅仅开发到todolist级别, 以后计划做成日计划,月计划, ...
- 【mui webAPP】HBuilder创建的iOS平台设置沉浸式状态栏
应用占用全屏区域,而系统状态栏需要预留出系统状态栏高度. HBuilder创建的应用默认不使用沉浸式状态栏样式,需要进行如下配置开启:打开应用的manifest.json文件,切换到代码视图,在plu ...
- 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付
前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...
随机推荐
- ar 归档
ar的常用用法见正文. 1.创建库文件 我 不知道怎么创建一个空的库文件.好在这个功能好像不是很需要.通常人们使用“ar cru liba.a a.o"这样的命令来创建一个库并把a.o添加进 ...
- c# 第24节 分部方法
本节内容: 1:分部方法 1:分部方法 2:实现分部方法 实现:
- 【Ribbon篇四】Ribbon介绍(1)
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具. 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法, ...
- verilog 常见单元描述
半加器: //行为级建模 module half_adder2(a, b, sum, c_out); input a, b; output sum, c_out; assign {c_out, sum ...
- MDK编译优化笔记
在一次使用MDk的编译优化等级比较高的时候发现编译不优化时功能正常,开了优化等级02就出现异常,调试中看了很多博客总结一下. 一个变量,如果你的主程序要用到,同时中断还要用到,要加volatile修饰 ...
- 洛谷 P4316 绿豆蛙的归宿
洛谷 P4316 绿豆蛙的归宿 洛谷传送门 题目背景 随着新版百度空间的上线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 题目描述 给出一个有向无环图,起点为1终点为N,每条边都有一个长度, ...
- ionic4 新建 - 报错
npm install -g cordova ionic 安装依赖 ionic start myApp tabs 新建项目 ionic g page name name为页面名称 新建组件 创建公共模 ...
- 树莓派包含python2.7系统路径
- 冒泡排序法(C语言)
冒泡排序(Bubble Sort)一种计算机科学领域的较简单的排序算法.它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小.首字母从从Z到A)错误就把他们交换过来.走访元素的工 ...
- Python爬取拉勾网招聘信息并写入Excel
这个是我想爬取的链接:http://www.lagou.com/zhaopin/Python/?labelWords=label 页面显示如下: 在Chrome浏览器中审查元素,找到对应的链接: 然后 ...