def create(self, request, *args, **kwargs): # print(request.data) # try: api = WXAPPAPI(appid=MINI_APP_ID, app_secret=MINI_APP_SECRET) code = request.data['code'] # 获取到code session_info = api.exchange_code_for_session_key(code=code) session_key = session_info.get('session_key') crypt = WXBizDataCrypt(MINI_APP_ID, session_key) encrypted_data = request.data['username'] # 获取到encrypted_data iv = request.data['password'] # 获取到iv user_info = crypt.decrypt(encrypted_data, iv) # 获取到用户的登陆信息 # 获取用户的信息 openid = user_info['openId'] # 获取openid avatarUrl = user_info['avatarUrl'] # 获取头像 country = user_info['country'] # 获取国家 province = user_info['province'] # 获取城市 city = user_info['city'] # 获取区域 gender = user_info['gender'] # 获取性别 language = user_info['language'] # 获取语言 nickName = user_info['nickName'] # 获取昵称 # 保存用户头像到本地 avatarPath = os.path.join(BASE_DIR, 'upload/UserProFilebg/avatar/') avatarGet = requests.get(avatarUrl) avatar_name = avatarPath + openid + '.png' image = Image.open(BytesIO(avatarGet.content)) image.save(avatar_name) # 判断用户是否存在 if UserProFile.objects.filter(openid=openid): this_user = UserProFile.objects.filter(openid=openid) this_user.nickName = nickName # 更新用户的微信昵称 this_user.avatarUrl = avatarUrl # 更新用户微信头像 this_user.gender = str(gender) # 更新用户的性别 this_user.avatar = 'avatar/' + openid + '.png' this_user.update() return Response(status=status.HTTP_400_BAD_REQUEST) else: # 保存用户信息 if len(nickName) > 6: nickName = nickName[0:6] user_info_save = UserProFile() user_info_save.openid = openid # 保存用户openid user_info_save.avatarUrl = avatarUrl # 保存用户微信头像 user_info_save.country = country # 保存用户所在的国家 user_info_save.province = province # 保存用户所在的城市 user_info_save.city = city # 保存用户所在的区域 user_info_save.avatar = 'UserProFilebg/avatar/' + openid + '.png' user_info_save.gender = str(gender) # 保存用户的性别 user_info_save.language = language # 保存用户当前使用的语言 user_info_save.nickName = nickName # 保存用户的微信昵称 user_info_save.name = nickName # 用户原始的用户名 user_info_save.username = openid # 保存用户的昵称 user_info_save.password = make_password(openid) # 保存用户的密码 user_info_save.zhong_jifen = 0 user_info_save.save() # except: # return Response(status=status.HTTP_401_UNAUTHORIZED) return Response(status=status.HTTP_201_CREATED)
def get_serializer_context(self): """ Extra context provided to the serializer class. """ try: username = self.request.data api = WXAPPAPI(appid=MINI_APP_ID, app_secret=MINI_APP_SECRET) code = username['code'] # 获取到code session_info = api.exchange_code_for_session_key(code=code) session_key = session_info.get('session_key') crypt = WXBizDataCrypt(MINI_APP_ID, session_key) encrypted_data = username['username'] # 获取到encrypted_data iv = username['password'] # 获取到iv user_info = crypt.decrypt(encrypted_data, iv) # 获取到用户的登陆信息 # 获取用户的信息 openid = user_info['openId'] # 获取openid avatarUrl = user_info['avatarUrl'] # 获取到头像 nickName = user_info['nickName'] # 获取昵称 # 找到用户更新用户的微信昵称和头像 this_user = UserProFile.objects.filter(openid=openid) if this_user: this_user = this_user[0] this_user.avatarUrl = avatarUrl this_user.nickName = nickName # this_user.avatar = 'avatar/' + openid + '.png' this_user.save() username['username'] = openid username['password'] = openid del username['code'] except: pass return { 'request': self.request, 'view': self, }
def post(self, request, *args, **kwargs): ################################################################# # 这段为 编辑 验证字段的逻辑 主要是讲 request的'username' 'password' 都设置为用户唯一id openId # 这里 缺一段 类之间 self的传递 搞不清楚 try: username = request.data.copy() print(1) api = WXAPPAPI(appid=MINI_APP_ID, app_secret=MINI_APP_SECRET) print(2) code = username['code'] # 获取到code session_info = api.exchange_code_for_session_key(code=code) session_key = session_info.get('session_key') crypt = WXBizDataCrypt(MINI_APP_ID, session_key) print(3) encrypted_data = username['username'] # 获取到encrypted_data iv = username['password'] # 获取到iv user_info = crypt.decrypt(encrypted_data, iv) # 获取到用户的登陆信息 print(4) # 获取用户的信息 openid = user_info['openId'] # 获取openid avatarUrl = user_info['avatarUrl'] # 获取到头像 nickName = user_info['nickName'] # 获取昵称 # 找到用户更新用户的微信昵称和头像 this_user = UserProFile.objects.filter(openid=openid) print(5) if this_user: this_user = this_user[0] this_user.avatarUrl = avatarUrl this_user.nickName = nickName # this_user.avatar = 'avatar/' + openid + '.png' this_user.save() print(6) username['username'] = openid username['password'] = openid del username['code'] except: print('失败') pass ################################################################## serializer = self.get_serializer(data=username) if serializer.is_valid(): user = serializer.object.get('user') or request.user token = serializer.object.get('token') response_data = jwt_response_payload_handler(token, user, request) print(response_data) response = Response(response_data) # token = Token.objects.create(user=...) # print(token.key) if api_settings.JWT_AUTH_COOKIE: expiration = (datetime.utcnow() + api_settings.JWT_EXPIRATION_DELTA) response.set_cookie(api_settings.JWT_AUTH_COOKIE, token, expires=expiration, httponly=True) return response return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)