首先要完成這個模塊要先創建兩張表
表創建好了之后我們想辦法拿到用戶的數據,需要拿到用戶的數據就要去看一下微信開放的接口
發現想要拿到用戶的數據就要用這個接口來獲取
同樣發現登錄接口需要用到login獲取的code來獲取用戶的唯一標識符openid
我們首先去前台渲染的頁面去加上一個接口
設置好接口我們就可以寫js來獲取數據
現在該開始寫后台了
現在我們要設置另一個接口就是用戶已存在數據庫中時返回另一個頁面
返回狀態之后在后台進行設置
1 #后台代碼 2 @route_api.route("/api/member/login",methods = ["GET","POST"]) 3 def login(): 4 resp = {'code':200,'msg':'操作成功','data':{}} 5 #獲取用戶數據 6 req = json.loads(request.values['rawData']) 7 #獲取code 8 code = request.form.get("code","") 9 # 判斷是否有code 10 if not code or len(code)<1: 11 resp['code'] = -1 12 resp['msg'] = '需要code' 13 return jsonify(resp) 14 #獲取openid 15 openid = MemberService.getWeChatOpenId(code) 16 if openid is None: 17 resp['code'] = -1 18 resp['msg'] = '調用微信出錯' 19 return jsonify(resp) 20 # req = json.loads(request.values['rawData']) 21 #獲取用戶名稱 22 nickname = req['nickName'] if 'nickName' in req else '' 23 #獲取性別 24 sex = req['gender'] if 'gender' in req else 0 25 #獲取頭像 26 avatar = req['avatarUrl'] if 'avatarUrl' in req else '' 27 """ 28 判斷是否已經測試過,注冊了直接返回 29 """ 30 #查看用戶是否已存在 31 bind_info = OauthMemberBind.query.filter_by(openid = openid,type = 1).first() 32 if not bind_info: 33 #創建數據 34 model_member = Member() 35 model_member.nickname = nickname 36 model_member.sex = sex 37 model_member.avatar = avatar 38 model_member.salt = MemberService.geneSalt() 39 model_member.updated_time = model_member.created_time = getCurrentDate() 40 db.session.add(model_member) 41 db.session.commit() 42 43 #創建數據 44 model_bind = OauthMemberBind() 45 model_bind.member_id = model_member.id 46 model_bind.type = 1 47 model_bind.openid = openid 48 model_bind.extra = '' 49 model_bind.updated_time = model_bind.created_time = getCurrentDate() 50 db.session.add(model_bind) 51 db.session.commit() 52 bind_info = model_bind 53 54 55 member_info = Member.query.filter_by(id=bind_info.member_id).first() 56 token = "%s#%s" % (MemberService.geneAuthCode(member_info), member_info.id) 57 resp['data'] = {'token': token} 58 return jsonify(resp) 59 60 61 @route_api.route("/api/member/check-reg",methods = ["GET","POST"]) 62 def checkReg(): 63 resp = {'code': 200, 'msg': '操作成功', 'data': {}} 64 # 獲取用戶數據 65 # req = json.loads(request.values['rawData']) 66 # print(req) 67 # 獲取code 68 code = request.form.get("code", "") 69 # 判斷是否有code 70 if not code or len(code) < 1: 71 resp['code'] = -1 72 resp['msg'] = '需要code' 73 return jsonify(resp) 74 # 獲取openid 75 openid = MemberService.getWeChatOpenId(code) 76 if openid is None: 77 resp['code'] = -1 78 resp['msg'] = '調用微信出錯' 79 return jsonify(resp) 80 81 bind_info = OauthMemberBind.query.filter_by(openid=openid, type=1).first() 82 if not bind_info: 83 resp['code'] = -1 84 resp['msg'] = '未綁定' 85 return jsonify(resp) 86 member_info = Member.query.filter_by(id=bind_info.member_id).first() 87 if not member_info: 88 resp['code'] = -1 89 resp['msg'] = '未查詢到相關信息' 90 return jsonify(resp) 91 92 token = "%s#%s"%(MemberService.geneAuthCode(member_info),member_info.id) 93 resp['data'] = {'token':token} 94 return jsonify(resp)
#js代碼 checkLogin:function () { var that = this; wx.login({ success:function(res){ if (!res.code){ app.alert('登錄失敗') } wx.request({ url: 'http://127.0.0.1:9090/api/member/check-reg', header:{ "Content-Type": "application/x-www-form-urlencoded"}, method: 'POST', data: {code:res.code}, success: function (res) { if (res.data.code != 200){ that.setData({ reFlag:false }); return } if (res.data.code == 200){ that.setData({ reFlag:true }); that.goToIndex(); } } }); } }); }, getUserProfile: function () { var that = this; wx.getUserProfile({ desc: '用於完善會員資料', success: function (res) { var data=res; wx.login({ success:function(res){ if (!res.code){ app.alert('登錄失敗') } data["code"]=res.code; wx.request({ url: app.buildUrl('/member/login'), header: { "Content-Type": "application/x-www-form-urlencoded" }, method: 'POST', data: data, success: function (res) { if (res.data.code != 200){ app.alert({'content':res.data.msg}); return } that.goToIndex(); } }); } }); }, fail:function (err) { console.log('獲取失敗') } }); } });