From 7443fef6def734e00cb155a1cb412991a31eb989 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Thu, 9 Jul 2026 21:09:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E8=AE=A4=E8=AF=81?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=A4=B1=E6=95=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- users/views/user_info.py | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/users/views/user_info.py b/users/views/user_info.py index ebbc081..98563ac 100644 --- a/users/views/user_info.py +++ b/users/views/user_info.py @@ -209,36 +209,45 @@ class UserInfoUpdateView(APIView): boss.nickname = nick result['nicheng'] = nick - # 手机号 —— 极简可靠版 + # 手机号 —— 失败不阻塞其他字段(头像/昵称)的保存 code = request.data.get('shoujihao_code') + phone_error = None if code: phone = self._get_phone_safe(code, request) if phone is None: - return Response({'code': 6, 'msg': '手机号获取失败,请重新授权', 'data': None}, status=400) - user.Phone = phone - user.PhoneVerified = True - result['phone'] = phone + phone_error = '手机号获取失败,请重新授权' + else: + user.Phone = phone + user.PhoneVerified = True + result['phone'] = phone - if not result: + if not result and not phone_error: logger.warning("[USERINFO_XIUGAI] 无更新,result 为空") return Response({'code': 5, 'msg': '无更新', 'data': None}, status=400) # 诊断日志:save 前的状态 logger.warning( "[USERINFO_XIUGAI] 准备保存 result_keys=%s, boss_pk=%s, boss_nickname_after=%r, " - "user_Avatar=%r, user_Phone=%r", + "user_Avatar=%r, user_Phone=%r, phone_error=%r", list(result.keys()), getattr(boss, 'pk', None), getattr(boss, 'nickname', None), getattr(user, 'Avatar', None), getattr(user, 'Phone', None), + phone_error, ) - with transaction.atomic(): - user.save() - boss.save() + # 有字段更新时先保存(即使手机号失败,头像/昵称也应入库) + if result: + with transaction.atomic(): + user.save() + boss.save() + logger.warning("[USERINFO_XIUGAI] 保存成功 result_keys=%s", list(result.keys())) + + if phone_error: + # 其他字段已保存,但手机号失败 —— 返回已保存的字段供前端更新缓存 + return Response({'code': 6, 'msg': phone_error, 'data': result}, status=200) - logger.warning("[USERINFO_XIUGAI] 保存成功 boss_pk=%s", getattr(boss, 'pk', None)) return Response({'code': 0, 'msg': '更新成功', 'data': result}) except Exception as e: