一.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. httpd虚拟主机起不来!!

    前几天在公司,练习负载均衡配置.在配置虚拟主机的web服务(apache) ,创建好虚拟主机的配置文件 ss -tnl  查看监控端口80已起来,通过本地浏览器访问一直显示默认的欢迎页... 一个下午 ...

  2. monkey和monkeyrunner的区别

    简单来说: 1.monkey是在设备或模拟器直接运行adb shell命令生成随机事件来进行测试 2.monkeyrunner是通过API发送特定的命令和事件来控制设备 为了支持黑盒自动化测试的场景, ...

  3. 使用Fiddler模拟弱网测试教程

    一.下载抓包工具Fiddler 官网下载链接:https://www.telerik.com/fiddler 二.设置Fiddler Tools>>Connections  然后修改监听端 ...

  4. bootstrap多级下拉菜单

    只需为下拉菜单的任意 <li> 元素添加 .dropdown-submenu 的类,并在该 <li> 元素下添加 .dropdown-menu 类的列表,就可以为该菜单项添加一 ...

  5. [C12] 大规模机器学习(Large Scale Machine Learning)

    大规模机器学习(Large Scale Machine Learning) 大型数据集的学习(Learning With Large Datasets) 如果你回顾一下最近5年或10年的机器学习历史. ...

  6. zz传统方法和深度学习结合的感知策略探索

    今天分享下 Pony.ai 在感知探索的过程中,使用的传统方法和深度学习方法.传统方法不代表多传统,深度学习也不代表多深度.它们都有各自的优点,也都能解决各自的问题.我们希望发挥它们的优点,并且结合起 ...

  7. win10 配置python3虚拟环境

    1.安装virtualenv pip install virtaulenv 2.创建虚拟环境 env03 virtualenv env03 3.切换到进入虚拟换环境脚本目录(activate) cd ...

  8. Kubernetes生产架构浅谈

    注意 本文,只是笔者针对Kubernetes生产环境运行的一些关于架构设计介绍. 介绍 基于 Kubernetes 系统构建的统一开发运维管控平台.在 Kubernetes 基础上,围绕 微服务系统的 ...

  9. sitecore系列教程场所分类简介

    在Sitecore体验平台(XP)中,场所是可跟踪的离线交互发生的位置.这些是发生交互的物理位置,例如特定的零售场所或公共汽车站. 您可以使用场所分类记录特定交互发生的位置.此信息保存在体验数据库(x ...

  10. 解决微信浏览器缓存站点入口文件(IIS部署Vue项目)

    最近开发的微信公众号项目中(项目采用Vue + Vux 构建,站点部署在IIS8.5上),遇到个非常奇葩的问题,发布站点内容后,通过微信打开网址发现是空白页面(后来验证是微信浏览器缓存了入口文件-in ...