一.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的更多相关文章

  1. HBuilder创建app 基础

    一.了解HBuilder HBuilder内封装了大量的书籍,极大方便了使用 官方文档: http://dev.dcloud.net.cn/mui/ui/ 关于布局: mhead  表头.mbody ...

  2. HBuilder创建app 3

    一.Audio 模块实现开启手机摄像头 基于html5 plus http://www.html5plus.org/doc/zh_cn/audio.html 栗子: <!DOCTYPE html ...

  3. springboot+layui实现PC端用户的增删改查 & 整合mui实现app端的自动登录和用户的上拉加载 & HBuilder打包app并在手机端下载安装

    springboot整合web开发的各个组件在前面已经有详细的介绍,下面是用springboot整合layui实现了基本的增删改查. 同时在学习mui开发app,也就用mui实现了一个简单的自动登录和 ...

  4. Hbuilder开发app实战-识岁03-文件上传

    前言 做app不得不谈的问题就是文件上传.用hbuilder开发app让上传变的非常easy. Uploader Uploader模块管理网络上传任务,用于从本地上传各种文件到server,并支持跨域 ...

  5. HBuilder开发App教程06-首页

    实战 前面几节基本是一些概念的普及, 正如前面提到的,本教程会以滴石作为范例进行解说, 有兴趣的能够先行下载体验一下.或者下载源代码研究下. 新建项目 打开HBuilder,在项目管理器中右键--新建 ...

  6. CASE函数 sql server——分组查询(方法和思想) ref和out 一般处理程序结合反射技术统一执行客户端请求 遍历查询结果集,update数据 HBuilder设置APP状态栏

    CASE函数   作用: 可以将查询结果集的某一列的字段值进行替换 它可以生成一个新列 相当于switch...case和 if..else 使用语法: case 表达式/字段 when 值 then ...

  7. HBuilder开发App教程05-滴石和websql

    滴石 介绍 滴石是用HBuilder开发的一款计划类app. 用到HBuilder,mui.nativejs以及h5一些特性. 预期 眼下仅仅开发到todolist级别, 以后计划做成日计划,月计划, ...

  8. 【mui webAPP】HBuilder创建的iOS平台设置沉浸式状态栏

    应用占用全屏区域,而系统状态栏需要预留出系统状态栏高度. HBuilder创建的应用默认不使用沉浸式状态栏样式,需要进行如下配置开启:打开应用的manifest.json文件,切换到代码视图,在plu ...

  9. 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付

    前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...

随机推荐

  1. TeamyinyinFish-> 测试报告

    测试人员 1. 姓名:鱼嘤嘤 2. 年龄: 21 3. 职业: 大三学生 4. 感情状况: 单身 用户故事 软件工程课上,老师想要他们组实现一个小组项目,鱼嘤嘤原本想摸鱼,但是转念一想觉得 还是需要好 ...

  2. day65_10_9vue循环指令与组件

    一.v-once v-once指令赋值给标签后,这个标签中的所有变量都不能被更改,只能被渲染一次.之后的改动不能改变该标签中的值: <div id="app"> < ...

  3. python27期python连接数据库:

    import pymysql创建connectinon对象:con = pymysql.connect(host = "localhost",user = "root&q ...

  4. jwt, token, session和cookies

    jwt token,session和cookies

  5. 《HBase在滴滴出行的应用场景和最佳实践》

    HBase在滴滴出行的应用场景和最佳实践   背景 对接业务类型 HBase是建立在Hadoop生态之上的Database,源生对离线任务支持友好,又因为LSM树是一个优秀的高吞吐数据库结构,所以同时 ...

  6. NOIP2018普及组复赛游记

    2018年11月10日,NOIP2018普及组复赛. 这是我初中阶段最后一次复赛了. 和往常一样,我们在预定的早上7点,没有出发. 10分钟之后,人终于到齐了,于是出发了,一路无话. 到了南航,合照三 ...

  7. MySQL SQL DML (数据操作语言)

    包括 SELECT, UPDATE, DELETE, INSERT SELECT 从数据库表中获取数据 用法 SELECT name FROM students; SELECT name,age FR ...

  8. Python连载32-多线程其他属性以及继承Thread类

    一.线程常用属性 1.threading.currentThread:返回当前线程变量 2.threading.enumerate:返回一个包含正在运行的线程的list,正在运行的线程指的是线程启动后 ...

  9. Java8新特性——StreamAPI 的使用

    StreamAPI的说明 Java8中有两大最为重要的改变.第一个是 Lambda 表达式:另外一个则是 Stream API. Stream API ( java.util.stream) 把真正的 ...

  10. 在IIS配置时没有启用目录浏览功能 :HTTP 错误 403.14

    在IIS配置时没有启用目录浏览功能,浏览网站时,会出现“HTTP 错误 403.14–Forbidden,Web服务器被配置为不列出此目录内容”的提示,怎么解决这个问题呢? 01 02 03 04 0 ...