Browse Source

fix: 修复子应用、中间件、异常无法正常挂载的问题

master
insistence 1 year ago
parent
commit
a8478ff8a5
  1. 42
      ruoyi-fastapi-backend/exceptions/handle.py
  2. 29
      ruoyi-fastapi-backend/middlewares/cors_middleware.py
  3. 10
      ruoyi-fastapi-backend/middlewares/handle.py
  4. 13
      ruoyi-fastapi-backend/server.py
  5. 10
      ruoyi-fastapi-backend/sub_applications/handle.py
  6. 9
      ruoyi-fastapi-backend/sub_applications/staticfiles.py

42
ruoyi-fastapi-backend/exceptions/handle.py

@ -1,27 +1,27 @@
from fastapi import Request
from fastapi import FastAPI, Request
from fastapi.exceptions import HTTPException
from server import app
from exceptions.auth_exception import AuthException
from exceptions.permission_exception import PermissionException
from exceptions.exception import AuthException, PermissionException
from utils.response_util import ResponseUtil, JSONResponse, jsonable_encoder
# 自定义token检验异常
@app.exception_handler(AuthException)
async def auth_exception_handler(request: Request, exc: AuthException):
return ResponseUtil.unauthorized(data=exc.data, msg=exc.message)
def handle_exception(app: FastAPI):
"""
全局异常处理
"""
# 自定义token检验异常
@app.exception_handler(AuthException)
async def auth_exception_handler(request: Request, exc: AuthException):
return ResponseUtil.unauthorized(data=exc.data, msg=exc.message)
# 自定义权限检验异常
@app.exception_handler(PermissionException)
async def permission_exception_handler(request: Request, exc: PermissionException):
return ResponseUtil.forbidden(data=exc.data, msg=exc.message)
# 自定义权限检验异常
@app.exception_handler(PermissionException)
async def permission_exception_handler(request: Request, exc: PermissionException):
return ResponseUtil.forbidden(data=exc.data, msg=exc.message)
# 处理其他http请求异常
@app.exception_handler(HTTPException)
async def http_exception_handler(request: Request, exc: HTTPException):
return JSONResponse(
content=jsonable_encoder({"code": exc.status_code, "msg": exc.detail}),
status_code=exc.status_code
)
# 处理其他http请求异常
@app.exception_handler(HTTPException)
async def http_exception_handler(request: Request, exc: HTTPException):
return JSONResponse(
content=jsonable_encoder({"code": exc.status_code, "msg": exc.detail}),
status_code=exc.status_code
)

29
ruoyi-fastapi-backend/middlewares/cors_middleware.py

@ -1,18 +1,19 @@
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from server import app
# 前端页面url
origins = [
"http://localhost:80",
"http://127.0.0.1:80",
]
def add_cors_middleware(app: FastAPI):
# 前端页面url
origins = [
"http://localhost:80",
"http://127.0.0.1:80",
]
# 后台api允许跨域
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# 后台api允许跨域
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)

10
ruoyi-fastapi-backend/middlewares/handle.py

@ -0,0 +1,10 @@
from fastapi import FastAPI
from middlewares.cors_middleware import add_cors_middleware
def handle_middleware(app: FastAPI):
"""
全局中间件处理
"""
# 加载跨域中间件
add_cors_middleware(app)

13
ruoyi-fastapi-backend/server.py

@ -1,5 +1,8 @@
from fastapi import FastAPI
from contextlib import asynccontextmanager
from sub_applications.handle import handle_sub_applications
from middlewares.handle import handle_middleware
from exceptions.handle import handle_exception
from module_admin.controller.login_controller import loginController
from module_admin.controller.captcha_controller import captchaController
from module_admin.controller.user_controller import userController
@ -24,6 +27,7 @@ from utils.log_util import logger
from utils.common_util import worship
# 生命周期事件
@asynccontextmanager
async def lifespan(app: FastAPI):
logger.info(f"{AppConfig.app_name}开始启动")
@ -39,6 +43,7 @@ async def lifespan(app: FastAPI):
await SchedulerUtil.close_system_scheduler()
# 初始化FastAPI对象
app = FastAPI(
title=AppConfig.app_name,
description=f'{AppConfig.app_name}接口文档',
@ -46,7 +51,15 @@ app = FastAPI(
lifespan=lifespan
)
# 挂载子应用
handle_sub_applications(app)
# 加载中间件处理方法
handle_middleware(app)
# 加载全局异常处理方法
handle_exception(app)
# 加载路由列表
controller_list = [
{'router': loginController, 'tags': ['登录模块']},
{'router': captchaController, 'tags': ['验证码模块']},

10
ruoyi-fastapi-backend/sub_applications/handle.py

@ -0,0 +1,10 @@
from fastapi import FastAPI
from sub_applications.staticfiles import mount_staticfiles
def handle_sub_applications(app: FastAPI):
"""
全局处理子应用挂载
"""
# 挂载静态文件
mount_staticfiles(app)

9
ruoyi-fastapi-backend/sub_applications/staticfiles.py

@ -1,7 +1,10 @@
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from server import app
from config.env import UploadConfig
# 挂载静态文件路径
app.mount(f"{UploadConfig.UPLOAD_PREFIX}", StaticFiles(directory=f"{UploadConfig.UPLOAD_PATH}"), name="profile")
def mount_staticfiles(app: FastAPI):
"""
挂载静态文件
"""
app.mount(f"{UploadConfig.UPLOAD_PREFIX}", StaticFiles(directory=f"{UploadConfig.UPLOAD_PATH}"), name="profile")

Loading…
Cancel
Save