首先要完成这个模块要先创建两张表
表创建好了之后我们想办法拿到用户的数据,需要拿到用户的数据就要去看一下微信开放的接口
发现想要拿到用户的数据就要用这个接口来获取
同样发现登录接口需要用到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('获取失败') } }); } });