国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

微信小程序 本地數據存儲實例詳解

2019-11-19 16:49:53
字體:
來源:轉載
供稿:網友

微信小程序 本地數據存儲實例詳解

前言

如果您在看此文章之前有過其他程序的開發(fā)經驗,那一定會知道一般例如安卓或者蘋果的原生APP都提供了本地的存儲功能,甚至可以使用sqlite數據庫來做存儲。可是微信的小程序框架基于微信本身,其實際運行環(huán)境只是在瀏覽器里面,所以不會提供那么豐富的數據存儲實力。但html5開始已經可以在瀏覽器里面存儲數據,好在微信的小程序給這個功能封裝好了,這樣我們可以使用數據存儲。

每個微信小程序都可以有自己的本地緩存,可以通過 wx.setStorage(wx.setStorageSync)

wx.getStorage(wx.getStorageSync)、 wx.clearStorage(wx.clearStorageSync) 

可以對本地緩存進行設置、獲取和清理。本地緩存最大為10MB。

上面的set和get都有對應的Sync方法,帶Sync的方法為同步方法、不帶Sync的方法為異步方法。

設置緩存都需要設置一個key和對應的data值,我們在《微信web開發(fā)者工具》中的調試狀態(tài)下可以點擊調試窗口的Storage 欄來查看我們緩存在本地的數據。

緩存可以保存數組、數值、字符串、對象。

設置緩存

提供setStorage和setStorageSync兩個接口,并且在使用設置存儲方法時,如果小程序的存儲值當中已經存在對應的key的值,那么會使用新的值替換原來的值。

setSotrage接口

wx.setStorage({ key:"key", data:"value", success:function(res){console.log(res)}, fail:function(res){console.log(res)}, complete:function(res){console.log(res)},})//Object {errMsg: "setStorage:ok"}//Object {errMsg: "setStorage:ok"}

setStorageSync接口

因為該方法為同步接口,所以直接設置key和data:

wx.setStorageSync('key', 'value')

上面兩個demo中我們都使用了字符串緩存,當然我們也可以緩存一個對象,例如:

wx.setStorage({key:"ob",data:{name:'smallerpig',sex:1,age:18}})

獲取緩存

getSotrage接口

異步接口,所以我們可以定義幾個回調:

wx.getStorage({ key:'key', success:function(res){  console.log(res)//Object {errMsg: "getStorage:ok", data: "value1"} }, fail:function(res){console.log(res)}, complete:function(res){console.log(res)}})

其中,我們可以看出來,微信小程序的很多異步接口的回調都會給出三個回調:success、fail、complete,在執(zhí)行成功的時候回執(zhí)行success、complete回調;在執(zhí)行失敗之后會分別執(zhí)行fail、complete回調。

getSotrageSync接口

該接口為同步接口,所以只需傳遞對應的key值就可以了。如下列代碼:

wx.getStorageSync('ob')//Object {name: "smallerpig", sex: 1, age: 18}

獲取當前存儲總結

使用wx.getStorageInfo接口

例如下列代碼:

wx.getStorageInfo({ success: function(res) { console.log(res.keys) console.log(res.currentSize) console.log(res.limitSize) }//["logs", "r3session", "key"]0: "logs"1: "r3session"2: "key"]//1//10240})

也可以使用同步接口wx.getStorageInfoSync。

緩存的使用

在上一篇文章中,小豬介紹了如何解密通過wx.getUserInfo接口獲取到的cryptedData數據。其中的session_key小豬是寫在flask的緩存中,緩存的鍵是寫死為:xcx_session_key。在真實環(huán)境中我們不能夠這樣寫,因為這樣不同的用戶獲取到的session_key是相同的,所以我們需要給不同的用戶附上不同的緩存key。把flask的緩存key返回給微信小程序,小程序中可以固定一個key值,data值保持flask后臺給到的值。

說的比較繞,這里需要讀者好好理解下。

在flask的代碼的使用code獲取session_key中,使用下列代碼:

@app.route('/user/getuserinfo', methods=['GET', 'POST'])def getuserinfo(): code = request.data url = 'https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code' % (appid, secret, code) r = requests.get(url) j = json.loads(r.text) r3session_key = binascii.hexlify(os.urandom(64)) cache.set(r3session_key, j['session_key']) return r3session_key

接下來,在wx.request的回調中把flask中返回的r3session_key保存起來:

wx.request({ url: 'https://***.smallerpig.com/user/getuserinfo', data: r.code, method: 'POST', success: function(res){ wx.setStorageSync('r3session', res.data) }})

再接下來,在調用wx.getUserInfo時將返回的數據加上從微信小程序本地緩存中取到的r3session丟給flask來處理,flask根據來的r3session從本地服務器的flask緩存中取到微信的值解密cryptedData。這才是一個完整的過程。

小程序的getUserInfo代碼:

wx.getUserInfo({ success: function (res) { that.globalData.userInfo = res.userInfo typeof cb == "function" && cb(that.globalData.userInfo) //將本地存儲中的r3session值也同樣傳遞到我的服務器,在服務器中找出微信給到我們的session_key var r3session = wx.getStorageSync('r3session') res.r3session = r3session wx.request({  url: 'https://***.smallerpig.com/user/getuserunionid',  data: res,  success: function(res){  // success  console.log(res)  }, }) }})

對應的flask代碼:

@app.route('/user/getuserunionid', methods=['GET', 'POST'])def getuserid(): r = json.loads(request.data) encryptedData = r['encryptedData'] iv = r['iv'] xcx_session_key = r['r3session'] session_key = cache.get(xcx_session_key) # 從緩存中取出對應r3session對應的session_key pc = WXBizDataCrypt(appid, session_key) return pc.decrypt(encryptedData, iv)

參考官方文檔地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/data.html

總結

經過幾篇文章的介紹,如果您是按照小豬的代碼一步一步做的話你應該已經了解小程序開發(fā)的大致過程,接下來的重點無非就是熟悉小程序提供給大家的接口,然后根據這些接口來完善我們的業(yè)務邏輯。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 梁河县| 广丰县| 南宁市| 蒙城县| 永济市| 海门市| 呼玛县| 东乌珠穆沁旗| 岚皋县| 铜陵市| 自治县| 平舆县| 迁安市| 吉木乃县| 昔阳县| 中超| 巩留县| 通州区| 岑巩县| 海宁市| 镇坪县| 历史| 阿拉善右旗| 馆陶县| 庆安县| 齐齐哈尔市| 邹平县| 仪陇县| 中山市| 遂宁市| 江安县| 普陀区| 巴青县| 乳山市| 依兰县| 含山县| 沈丘县| 扬中市| 庆元县| 安庆市| 巩留县|