Browse Source

封装dbsession

tanlie 1 month ago
parent
commit
e859483e83
2 changed files with 24 additions and 4 deletions
  1. 21 0
      FastApi/app/__init__.py
  2. 3 4
      FastApi/app/mobile/views/user_views.py

+ 21 - 0
FastApi/app/__init__.py

@@ -50,6 +50,27 @@ def _clean_message(s: str) -> str:
 
 def create_app():
     app = FastAPI()
+
+    # Attach a DB session to each request via middleware so handlers can use request.state.db
+    from app.core.db import SessionLocal
+
+    @app.middleware("http")
+    async def db_session_middleware(request: Request, call_next):
+        # Provide a request-scoped SQLAlchemy session
+        request.state.db = SessionLocal()
+        try:
+            response = await call_next(request)
+            return response
+        except Exception:
+            # If an unhandled exception occurred, rollback any pending transaction
+            try:
+                request.state.db.rollback()
+            except Exception:
+                pass
+            raise
+        finally:
+            request.state.db.close()
+
     register_mobile_routes(app)
 
     @app.exception_handler(RequestValidationError)

+ 3 - 4
FastApi/app/mobile/views/user_views.py

@@ -5,10 +5,8 @@ date: 2026/8/30
 """
 import logging
 
-from fastapi import APIRouter, Body, Query, Depends
-from sqlalchemy.orm import Session
+from fastapi import APIRouter, Body, Query, Request
 
-from app.core.db import get_db
 from app.core.response import success_response, error_response
 from app.mobile.req.user import UserLoginReq
 from app.models.user import User
@@ -43,9 +41,10 @@ def wish_summary():
 
 
 @api.get("/userinfo", summary="获取用户信息")
-def get_userinfo(userId: int = Query(description="用户ID"), db: Session = Depends(get_db)):
+def get_userinfo(request: Request, userId: int = Query(description="用户ID")):
     """查询数据库并返回用户信息"""
     logger.info("获取用户信息,userId=%s", userId)
+    db = request.state.db
     res = db.query(User).filter(User.id == userId).first()
     if not res:
         return error_response(msg="用户不存在", code=404)