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

  1. 从中间件的历史来看移动App开发的未来

    在移动开发领域我们发现一个很奇怪的现象:普通菜鸟新手经过3个月的培训就可以拿到 8K 甚至上万的工作:在北京稍微有点工作经验的 iOS 开发,就要求 2 万一个月的工资.不知道大家是否想过:移动应用开 ...

  2. app开发外包注意事项,2017最新资讯

    我们见过很多创业者,栽在这app外包上.很多创业者对于app外包这件事情不是特别重视,以为将事情交给app外包公司就完事了,实际上不是的.无论是从选择app外包公司还是签订合同.售后维护等各方面都有许 ...

  3. 前端移动App开发环境搭建

    移动App开发环境安装 一.环境安装准备软件 二.node的安装 像安装普通软件一样,安装对应版本的node软件,安装好之后就可以运行npm命令行,比如npm init .npm install -g ...

  4. 一个小白App开发需要了解的基本技术

    本文针对小白用户对App做一个简单的介绍,首先要了解App都有哪些类型,不同的类型适用于哪些需求,用户可以根据自己的需求选择不同的App开发. 一 App有哪些形式 WebApp:简单来说,Web A ...

  5. 移动web app开发必备 - 异步队列 Deferred

    背景 移动web app开发,异步代码是时常的事,比如有常见的异步操作: Ajax(XMLHttpRequest) Image Tag,Script Tag,iframe(原理类似) setTimeo ...

  6. 移动web app开发必备 - Deferred 源码分析

    姊妹篇  移动web app开发必备 - 异步队列 Deferred 在分析Deferred之前我觉得还是有必要把老套的设计模式给搬出来,便于理解源码! 观察者模式 观察者模式( 又叫发布者-订阅者模 ...

  7. html5 app开发,你知道多少?

    随着大量新生移动设备的兴起,改变了互联网的未来,html5技术为开发者提供了一个跨平台的移动app开发方案,并且该方案具有很好的扩展性和灵活性,但就国内使用html5开发app应用技术来讲,还是有欠缺 ...

  8. 选择App开发外包时,你该了解哪些法律常识?

    随着App需求的激增,选择App外包服务的客户也多了起来.然而客户和开发方对于其中的法律条款却不甚了解,导致在服务过程中,时常会发生一些分歧和纠纷,最终致使项目搁浅. 为了普及App外包的法律常识,移 ...

  9. phongap、APICloud、ionic等app开发平台你都知道吗?

    大众创业热,很多人都想在互联网大展拳脚,然而大部分人却是非技术背景.针对这个行业痛点,现在国内外涌现出众多APP开发工具,开发者只要有相关的HTML5.CSS和JavaScript知识,便可以轻松快速 ...

  10. iOS APP开发的小知识(分享)

          亿合科技小编发现从2007年第一款智能手机横空出世,由此开启了人们的移动智能时代.我们从一开始对APP的陌生,到现在的爱不释手,可见APP开发的出现对我们的生活改变有多巨大.而iOS AP ...

随机推荐

  1. 【python库模块】Python subprocess模块功能与常见用法实例详解

    前言 这篇文章主要介绍了Python subprocess模块功能与常见用法,结合实例形式详细分析了subprocess模块功能.常用函数相关使用技巧. 参考 1. Python subprocess ...

  2. [PHP] 浅谈 Laravel Authentication 的 guards 与 providers

    从文档的简单介绍上来讲,有一些抽象. 个人感觉,对于概念上的大多数不理解主要还是来自于 文档不是讲设计思路,而是实际操作. 查看英文文档,通常来说可以给你最准确的直觉,而本地翻译一般比较字面或者带有理 ...

  3. python:字符串中提取特定的数据

    在日志文件中有一大堆,格式相同的文本,需要提取出接口耗时的时间 >>> 运单号:71742507538566,快递100接口耗时:8,返回结果:[{"lengthPre&q ...

  4. Windows Server 2008 R2 IIS7.5配置FTP图文教程

    本文为大家分享了IIS 配置FTP 网站的具体过程,供大家参考,具体内容如下 说明:服务器环境是Windows Server 2008 R2,IIS7.5. 1. 在 服务器管理器的Web服务器(II ...

  5. (转)IntelliJ IDEA 插件 阿里巴巴Java开发手册(Alibaba Java Coding Guidelines)

    背景:idea安装插件,学习使用阿里巴巴开发插件. 在线和离线的安装方式. IntelliJ IDEA 插件 阿里巴巴Java开发手册(Alibaba Java Coding Guidelines) ...

  6. javaSE总结(二)--java面向对象

    一.类和对象 (1)类 [修饰符] class 类名{ //修饰符1:private public protected 三个最多出现其一 //修饰符2:abstract final 两个最多出现其一 ...

  7. 通过Fastdfs进行文件上传服务(文件和图片的统一处理)

    1.文件上传简单流程分析图: 2.Fastdfs介绍: Fastdfs由两个角色组成: Tracker(集群):调度(帮你找到有空闲的Storage) Storage(集群):文件存储(帮你保存文件或 ...

  8. MSSQLSERVER 服务运行内存设置较小导致启动服务失败

    问题产生原因: 手动设置MSSQLSERVER 运行内存,设置值未达到MSSQLSERVER 服务运行内存最低值(max server memory 所允许的最小内存量是 128 MB.),导致MSS ...

  9. java之spring之初始spring

    1.Spring 在多个框架中起到润滑剂的作用,桥梁的作用,纽带的作用. 2.Spring是一个容器,也是一个对象工厂.帮助程序员创建对象,管理对象. 3.Spring的体系结构: 4.学习sprin ...

  10. AVI文件格式

    AVI文件采用的是RIFF文件结构方式.波形音频wave,MIDI和数字视频AVI都采用这种格式存储. AVI文件的整体结构如下图所示 构造RIFF文件的基本单元叫做数据块(Chunk),每个数据块包 ...