main.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. from fastapi import FastAPI, Depends,HTTPException,Request,status,Response
  2. from router.auth import auth_router, oauth2_scheme, verify_token
  3. from router.users import users_router
  4. from router.graph import graph_router
  5. from router.file_browse import file_browse_router
  6. from router.kg import kg_router
  7. from router.tasks import task_router
  8. from router.nlp_models import nlp_router
  9. from router.labeling import labeling_router
  10. from router.data_import import data_import_router
  11. from router.data_export import data_export_router
  12. from router.dify_kb import dify_kb_router
  13. from db.database import Base, engine
  14. import router.errors as errors
  15. import jieba
  16. jieba.load_userdict("./dict/jieba_dict.txt")
  17. #from models.response import ResponseFormatterMiddleware
  18. app = FastAPI()
  19. @app.middleware("http")
  20. async def debug_middleware(request: Request, call_next):
  21. print(f"Request path: {request.url.path}")
  22. response = await call_next(request)
  23. if response.status_code == 404:
  24. print(f"404 Not Found for path: {request.url.path}")
  25. return response
  26. errors.registerCustomErrorHandle(app)
  27. Base.metadata.create_all(bind=engine)
  28. # 添加中间件到应用中
  29. #app.add_middleware(ResponseFormatterMiddleware)
  30. # 挂载路由
  31. app.include_router(auth_router)
  32. app.include_router(users_router)
  33. #app.include_router(graph_router, dependencies=[Depends(oauth2_scheme)])
  34. app.include_router(file_browse_router)
  35. app.include_router(kg_router)
  36. app.include_router(nlp_router)
  37. app.include_router(task_router)
  38. app.include_router(labeling_router)
  39. app.include_router(data_import_router)
  40. app.include_router(data_export_router)
  41. app.include_router(dify_kb_router)
  42. def print_all_routes():
  43. print("Listing all routes:")
  44. for route in app.routes:
  45. # 获取路径
  46. path = route.path
  47. # 获取方法列表
  48. methods = ','.join([method for method in route.methods]) if hasattr(route, 'methods') else 'N/A'
  49. # 获取名称(通常是处理函数的名字)
  50. name = route.name
  51. print(f"Path: {path}, Methods: {methods}, Name: {name}")
  52. print_all_routes()
  53. # @app.middleware("http")
  54. # async def verify_http_token(request: Request, call_next):
  55. # auth_error = HTTPException(
  56. # status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
  57. # detail="Internal services error",
  58. # headers={"WWW-Authenticate": "Bearer"}, # OAuth2的规范,如果认证失败,请求头中返回“WWW-Authenticate”
  59. # )
  60. # # 获取请求路径
  61. # path: str = request.get('path')
  62. # # 登录接口、docs文档依赖的接口,不做token校验
  63. # if path.startswith('/api/token') | path.startswith('/api/docs') | path.startswith('/api/openapi') | path.startswith('/api/node-create'):
  64. # response = await call_next(request)
  65. # return response
  66. # else:
  67. # try:
  68. # # 从header读取token
  69. # authorization: str = request.headers.get('authorization')
  70. # response = Response(
  71. # status_code=status.HTTP_401_UNAUTHORIZED,
  72. # content="Invalid authentication credentials",
  73. # headers={"WWW-Authenticate": "Bearer"}, # OAuth2的规范,如果认证失败,请求头中返回“WWW-Authenticate”
  74. # )
  75. # if not authorization:
  76. # print("request was not authorized")
  77. # return response
  78. # # 拿到token值
  79. # token = authorization.split(' ')[1]
  80. # # 这个是我自己封装的校验token的逻辑,大家可以自己替换成自己的
  81. # if verify_token(token):
  82. # print("request token was correct")
  83. # response = await call_next(request)
  84. # return response
  85. # print("request token was incorrect")
  86. # return response
  87. # except Exception as e:
  88. # print("http_middleware error: ", e)
  89. # return auth_error
  90. if __name__ == "__main__":
  91. import uvicorn
  92. uvicorn.run(app='main:app', host="0.0.0.0", port=8000, reload=True)