123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- from fastapi import FastAPI, Depends,HTTPException,Request,status,Response
- from router.auth import auth_router, oauth2_scheme, verify_token
- from router.users import users_router
- from router.graph import graph_router
- from router.file_browse import file_browse_router
- from router.kg import kg_router
- from router.tasks import task_router
- from router.nlp_models import nlp_router
- from router.labeling import labeling_router
- from router.data_import import data_import_router
- from router.data_export import data_export_router
- from router.dify_kb import dify_kb_router
- from db.database import Base, engine
- import router.errors as errors
- import jieba
- jieba.load_userdict("./dict/jieba_dict.txt")
-
- #from models.response import ResponseFormatterMiddleware
- app = FastAPI()
- @app.middleware("http")
- async def debug_middleware(request: Request, call_next):
- print(f"Request path: {request.url.path}")
- response = await call_next(request)
- if response.status_code == 404:
- print(f"404 Not Found for path: {request.url.path}")
- return response
- errors.registerCustomErrorHandle(app)
- Base.metadata.create_all(bind=engine)
- # 添加中间件到应用中
- #app.add_middleware(ResponseFormatterMiddleware)
- # 挂载路由
- app.include_router(auth_router)
- app.include_router(users_router)
- #app.include_router(graph_router, dependencies=[Depends(oauth2_scheme)])
- app.include_router(file_browse_router)
- app.include_router(kg_router)
- app.include_router(nlp_router)
- app.include_router(task_router)
- app.include_router(labeling_router)
- app.include_router(data_import_router)
- app.include_router(data_export_router)
- app.include_router(dify_kb_router)
- def print_all_routes():
- print("Listing all routes:")
- for route in app.routes:
- # 获取路径
- path = route.path
- # 获取方法列表
- methods = ','.join([method for method in route.methods]) if hasattr(route, 'methods') else 'N/A'
- # 获取名称(通常是处理函数的名字)
- name = route.name
- print(f"Path: {path}, Methods: {methods}, Name: {name}")
-
- print_all_routes()
- # @app.middleware("http")
- # async def verify_http_token(request: Request, call_next):
- # auth_error = HTTPException(
- # status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
- # detail="Internal services error",
- # headers={"WWW-Authenticate": "Bearer"}, # OAuth2的规范,如果认证失败,请求头中返回“WWW-Authenticate”
- # )
- # # 获取请求路径
- # path: str = request.get('path')
- # # 登录接口、docs文档依赖的接口,不做token校验
- # if path.startswith('/api/token') | path.startswith('/api/docs') | path.startswith('/api/openapi') | path.startswith('/api/node-create'):
- # response = await call_next(request)
- # return response
- # else:
- # try:
- # # 从header读取token
- # authorization: str = request.headers.get('authorization')
-
- # response = Response(
- # status_code=status.HTTP_401_UNAUTHORIZED,
- # content="Invalid authentication credentials",
- # headers={"WWW-Authenticate": "Bearer"}, # OAuth2的规范,如果认证失败,请求头中返回“WWW-Authenticate”
- # )
- # if not authorization:
- # print("request was not authorized")
- # return response
- # # 拿到token值
- # token = authorization.split(' ')[1]
- # # 这个是我自己封装的校验token的逻辑,大家可以自己替换成自己的
-
- # if verify_token(token):
- # print("request token was correct")
- # response = await call_next(request)
- # return response
-
- # print("request token was incorrect")
- # return response
- # except Exception as e:
- # print("http_middleware error: ", e)
-
- # return auth_error
-
-
- if __name__ == "__main__":
- import uvicorn
- uvicorn.run(app='main:app', host="0.0.0.0", port=8000, reload=True)
|