app开发-2
一.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="1">#checked 默认选择
</div>
<div class="mui-input-row mui-radio mui-left">
<label>我是爸爸</label>
<input name="gender" type="radio" value="2">
</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)
app开发-2的更多相关文章
- 从中间件的历史来看移动App开发的未来
在移动开发领域我们发现一个很奇怪的现象:普通菜鸟新手经过3个月的培训就可以拿到 8K 甚至上万的工作:在北京稍微有点工作经验的 iOS 开发,就要求 2 万一个月的工资.不知道大家是否想过:移动应用开 ...
- app开发外包注意事项,2017最新资讯
我们见过很多创业者,栽在这app外包上.很多创业者对于app外包这件事情不是特别重视,以为将事情交给app外包公司就完事了,实际上不是的.无论是从选择app外包公司还是签订合同.售后维护等各方面都有许 ...
- 前端移动App开发环境搭建
移动App开发环境安装 一.环境安装准备软件 二.node的安装 像安装普通软件一样,安装对应版本的node软件,安装好之后就可以运行npm命令行,比如npm init .npm install -g ...
- 一个小白App开发需要了解的基本技术
本文针对小白用户对App做一个简单的介绍,首先要了解App都有哪些类型,不同的类型适用于哪些需求,用户可以根据自己的需求选择不同的App开发. 一 App有哪些形式 WebApp:简单来说,Web A ...
- 移动web app开发必备 - 异步队列 Deferred
背景 移动web app开发,异步代码是时常的事,比如有常见的异步操作: Ajax(XMLHttpRequest) Image Tag,Script Tag,iframe(原理类似) setTimeo ...
- 移动web app开发必备 - Deferred 源码分析
姊妹篇 移动web app开发必备 - 异步队列 Deferred 在分析Deferred之前我觉得还是有必要把老套的设计模式给搬出来,便于理解源码! 观察者模式 观察者模式( 又叫发布者-订阅者模 ...
- html5 app开发,你知道多少?
随着大量新生移动设备的兴起,改变了互联网的未来,html5技术为开发者提供了一个跨平台的移动app开发方案,并且该方案具有很好的扩展性和灵活性,但就国内使用html5开发app应用技术来讲,还是有欠缺 ...
- 选择App开发外包时,你该了解哪些法律常识?
随着App需求的激增,选择App外包服务的客户也多了起来.然而客户和开发方对于其中的法律条款却不甚了解,导致在服务过程中,时常会发生一些分歧和纠纷,最终致使项目搁浅. 为了普及App外包的法律常识,移 ...
- phongap、APICloud、ionic等app开发平台你都知道吗?
大众创业热,很多人都想在互联网大展拳脚,然而大部分人却是非技术背景.针对这个行业痛点,现在国内外涌现出众多APP开发工具,开发者只要有相关的HTML5.CSS和JavaScript知识,便可以轻松快速 ...
- iOS APP开发的小知识(分享)
亿合科技小编发现从2007年第一款智能手机横空出世,由此开启了人们的移动智能时代.我们从一开始对APP的陌生,到现在的爱不释手,可见APP开发的出现对我们的生活改变有多巨大.而iOS AP ...
随机推荐
- Win7下Powershell 由2.0 升级为 5.1
今天在构建脚本的时候老是提示 Windows 7 默认的Powershell是2.0,查看版本 下载 https://www.microsoft.com/en-us/download/details. ...
- svg可视化制作工具
svg可视化制作工具直接ai里面用钢笔路径画好 然后右键建立复合路径 最后存储为svg即可 这样生成的svg就带path标签了
- Openresty 健康检查
## 指定共享内存 lua_shared_dict healthcheck 1m; ## 在worker初始化过程中,启动定时器,进行后端结点的检查 init_worker_by_lua_block ...
- centos7修改主机名的方法
在CentOS7中,有三种定义的主机名: 静态的(Static hostname) “静态”主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始化的主机名. 瞬态的(Tansie ...
- CentOS 使用 prename修改文件名大小写的方法
1. CentOS和ubuntu的rename的命令是不一样的. CentOS的rename 使用的是c语言版本的 而ubuntu的rename使用的是 perl的版本,意味着很多ubuntu上面的扩 ...
- java实现限流
问题产生,当调用一个接口很频繁的时候,比如每秒调用一个接口100次.业务提现在抢购等.这时我们的服务器处理不过来就会拒绝服务,宕机等等...显然这不是我们需要的. 因此产生了限流这个.限流是什么呢,就 ...
- Java进阶——Java中的字符串常量池
转载. https://blog.csdn.net/qq_30379689/article/details/80518283 字符串常量池 JVM为了减少字符串对象的重复创建,其内部维护了一个特殊的内 ...
- 【数据结构】12.java源码关于ConcurrentHashMap
目录 1.ConcurrentMap的内部结构 2.ConcurrentMap构造函数 3.元素新增策略4.元素删除5.元素修改和查找6.特殊操作7.扩容8.总结 1.ConcurrentMap内部结 ...
- Hadoop1.X集群完全分布式模式环境部署
Hadoop1.X集群完全分布式模式环境部署 1 Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台.以Hadoop分布式文件系统(HDFS,Hadoop Distri ...
- Java自学-类和对象 继承
什么是 Java的 继承 ? 在LOL中,武器是物品的一种,也是有名称和价格的 所以在设计类的时候,可以让武器继承物品,从而继承名称和价格属性 步骤 1 : 物品类Item 物品类Item 有属性 n ...