From 6416fb465122560b65cbccbc9a33a5a693199ada Mon Sep 17 00:00:00 2001 From: deploy Date: Wed, 15 Jul 2026 18:50:36 +0800 Subject: [PATCH] =?UTF-8?q?fix(admin):=20=E4=BF=AE=E5=A4=8D=E6=B3=A8?= =?UTF-8?q?=E5=86=8C=E8=AE=BE=E7=BD=AEPUT=E6=8E=A5=E5=8F=A3=E2=80=94?= =?UTF-8?q?=E2=80=94=E7=94=B1=E7=8B=AC=E7=AB=8Bquery=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E6=8E=A5=E6=94=B6JSON=20body?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:PUT /admin/users/register-settings 参数定义为 phone_required: bool = None 等独立query参数, 但前端发送的是 JSON body {"phone_required":true,"email_required":true}。 FastAPI无法把JSON body映射到独立参数 → 全部收到None → 循环跳过 → DB无更新(提示成功但无效)。 修复:参数改为 body: dict 统一接收JSON,用 body.get() 取值更新 RegisterSetting 表。 --- backend/python/app/api/admin/users.py | 73 ++++++++++++--------------- 1 file changed, 32 insertions(+), 41 deletions(-) diff --git a/backend/python/app/api/admin/users.py b/backend/python/app/api/admin/users.py index 0d21abb..35407cb 100644 --- a/backend/python/app/api/admin/users.py +++ b/backend/python/app/api/admin/users.py @@ -121,57 +121,48 @@ async def get_register_settings( @router.put("/register-settings") async def update_register_settings( - phone_required: bool = None, - phone_sms_required: bool = None, - email_required: bool = None, - email_verify_required: bool = None, - real_name_required: bool = None, - aliyun_access_key: str = None, - aliyun_secret_key: str = None, - aliyun_endpoint: str = None, - sms_sign_name: str = None, - sms_template_code: str = None, + body: dict, admin_user=Depends(get_current_admin), db: Session = Depends(get_db), ): - """更新注册设置""" + """更新注册设置(接收 JSON Body)""" setting = db.query(RegisterSetting).first() if not setting: setting = RegisterSetting( id=str(uuid.uuid4()), - phone_required=phone_required if phone_required is not None else True, - phone_sms_required=phone_sms_required if phone_sms_required is not None else True, - email_required=email_required if email_required is not None else True, - email_verify_required=email_verify_required if email_verify_required is not None else True, - real_name_required=real_name_required or False, - aliyun_access_key=aliyun_access_key, - aliyun_secret_key=aliyun_secret_key, - aliyun_endpoint=aliyun_endpoint, - sms_sign_name=sms_sign_name, - sms_template_code=sms_template_code, + phone_required=body.get("phone_required", True), + phone_sms_required=body.get("phone_sms_required", True), + email_required=body.get("email_required", True), + email_verify_required=body.get("email_verify_required", True), + real_name_required=body.get("real_name_required", False), + aliyun_access_key=body.get("aliyun_access_key"), + aliyun_secret_key=body.get("aliyun_secret_key"), + aliyun_endpoint=body.get("aliyun_endpoint"), + sms_sign_name=body.get("sms_sign_name"), + sms_template_code=body.get("sms_template_code"), ) db.add(setting) else: - if phone_required is not None: - setting.phone_required = phone_required - if phone_sms_required is not None: - setting.phone_sms_required = phone_sms_required - if email_required is not None: - setting.email_required = email_required - if email_verify_required is not None: - setting.email_verify_required = email_verify_required - if real_name_required is not None: - setting.real_name_required = real_name_required - if aliyun_access_key is not None: - setting.aliyun_access_key = aliyun_access_key - if aliyun_secret_key is not None: - setting.aliyun_secret_key = aliyun_secret_key - if aliyun_endpoint is not None: - setting.aliyun_endpoint = aliyun_endpoint - if sms_sign_name is not None: - setting.sms_sign_name = sms_sign_name - if sms_template_code is not None: - setting.sms_template_code = sms_template_code + if "phone_required" in body: + setting.phone_required = body["phone_required"] + if "phone_sms_required" in body: + setting.phone_sms_required = body["phone_sms_required"] + if "email_required" in body: + setting.email_required = body["email_required"] + if "email_verify_required" in body: + setting.email_verify_required = body["email_verify_required"] + if "real_name_required" in body: + setting.real_name_required = body["real_name_required"] + if "aliyun_access_key" in body: + setting.aliyun_access_key = body["aliyun_access_key"] + if "aliyun_secret_key" in body: + setting.aliyun_secret_key = body["aliyun_secret_key"] + if "aliyun_endpoint" in body: + setting.aliyun_endpoint = body["aliyun_endpoint"] + if "sms_sign_name" in body: + setting.sms_sign_name = body["sms_sign_name"] + if "sms_template_code" in body: + setting.sms_template_code = body["sms_template_code"] setting.updated_at = datetime.now() db.commit()