main.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. # -*- coding: utf-8 -*-
  2. import time
  3. from threading import Thread
  4. from fastapi import FastAPI,Request
  5. from fastapi.responses import PlainTextResponse
  6. from typing import Callable
  7. from core.api_get_article import router as r1
  8. from core.api_get_audio import router as r2
  9. from core.api_get_article2 import router as r3
  10. from core.api_get_word import router as r4
  11. from core.api_get_spoken_language import router as r5
  12. from core.api_get_article3 import router as r6
  13. from core.api_article_annotation import router_article_annotation as r7
  14. from tools.loglog import logger,log_err_e
  15. from tools.del_expire_file import run_del_normal
  16. from core.respone_format import *
  17. app = FastAPI(title="AI相关功能接口", version="1.1")
  18. app.include_router(r2, tags=["用户管理"])
  19. app.include_router(r1, tags=["青提文章管理"])
  20. app.include_router(r2, tags=["音频管理"])
  21. app.include_router(r3, tags=["春笋文章管理"])
  22. app.include_router(r4, tags=["生成word文档"])
  23. app.include_router(r5, tags=["口语评测"])
  24. app.include_router(r6, tags=["deepseek文章"])
  25. app.include_router(r7, tags=["文章词义标注"])
  26. @app.middleware("http")
  27. async def add_process_time_header(request: Request, call_next: Callable):
  28. start_time = time.time()
  29. real_ip = request.headers.get("X-Real-IP")
  30. params = request.query_params
  31. path = request.url.path
  32. try:
  33. body = await request.json() if request.method in ["POST", "PUT", "PATCH"] else ""
  34. except:
  35. body =""
  36. logger.info(f"\n正式接口请求:{real_ip} {request.method} {path}\n查询参数:{params}\n携带参数:{body}")
  37. try:
  38. response = await call_next(request)
  39. except Exception as e:
  40. log_err_e(e,msg="http中间件错误捕捉")
  41. return resp_500(message=f"{type(e).__name__},{e}")
  42. process_time = str(round(time.time() - start_time, 2))
  43. response.headers["X-Process-Time"] = process_time
  44. if path not in ['/','/tts']:
  45. with open('log/time_log.txt', encoding='utf-8', mode='a')as f:
  46. t = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
  47. f.write(f"{t} 路径:{path} - 用时:{process_time}\n")
  48. return response
  49. @app.get("/")
  50. @app.post("/")
  51. def hello():
  52. return PlainTextResponse("hello world")
  53. del_file_thread = Thread(target=run_del_normal, daemon=True)
  54. del_file_thread.start()