1fastapi.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. # 导入FastAPI静态文件挂载模块,用于托管图片、css、js等静态资源
  2. from fastapi.staticfiles import StaticFiles
  3. from fastapi.templating import Jinja2Templates
  4. # 导入FastAPI核心实例、Request请求对象(用于接收请求参数)
  5. from fastapi import FastAPI, Request
  6. # 导入uvicorn ASGI异步web服务器,用来运行FastAPI项目
  7. import uvicorn
  8. # 从api子包中导入拆分后的各个路由蓝图对象,实现接口模块化拆分
  9. from api.book import api_book
  10. from api.cbs import api_cbs
  11. from api.zz import api_zz
  12. # 实例化FastAPI应用程序核心对象
  13. app = FastAPI()
  14. # 挂载静态资源目录
  15. # path:浏览器访问URL前缀;directory:本地存放静态文件的文件夹;name:内部标识名
  16. # 访问示例:http://127.0.0.1:8000/upimg/img.png 即可直接读取upimg文件夹下的img.png图片
  17. app.mount("/upimg", StaticFiles(directory="upimg"), name="upimg")
  18. templates = Jinja2Templates(directory="templates")
  19. # 批量注册拆分后的子路由,统一添加接口前缀和接口分类标签(用于自动接口文档分组)
  20. # prefix:给当前分组所有接口统一拼接URL前缀;tags:接口文档里的分组名称
  21. app.include_router(api_book, prefix="/book", tags=["book interface"])
  22. app.include_router(api_cbs, prefix="/cbs", tags=["cbs interface"])
  23. app.include_router(api_zz, prefix="/zz", tags=["zz interface"])
  24. # 根路径访问接口,项目首页测试接口
  25. @app.get("/")
  26. async def root():
  27. return {"message": "Hello World"}
  28. # GET请求测试接口,演示基础GET方式请求
  29. @app.get("/get")
  30. async def get_test():
  31. return {"method": "get method"}
  32. # POST请求测试接口,演示基础POST方式请求
  33. @app.post("/post")
  34. async def post_test():
  35. return {"method": "post method"}
  36. # PUT请求测试接口,常用于更新资源操作
  37. @app.put("/put")
  38. async def put_test():
  39. return {"method": "put method"}
  40. # DELETE请求测试接口,常用于删除资源操作
  41. @app.delete("/delete")
  42. async def delete_test():
  43. return {"method": "delete method"}
  44. # GET接口:获取URL拼接的Query查询参数
  45. # Request对象接收完整请求对象,通过query_params提取地址栏?后的参数
  46. @app.get("/get_test")
  47. async def get_test(request: Request):
  48. get_test = request.query_params
  49. print(get_test) # 在服务端控制台打印GET携带的查询参数
  50. return {"method": "get_test"}
  51. # POST接口:接收JSON格式请求体数据
  52. # await request.json() 异步读取请求体中的json数据,必须加await否则拿不到真实数据
  53. @app.post("/post_test")
  54. async def post_test(request: Request):
  55. post_test = await request.json()
  56. print(post_test) # 控制台打印前端传递的json请求体内容
  57. return {"method": "post_test"}
  58. @app.get("/jinjia2templates")
  59. async def jinjia2templates(request: Request):
  60. return templates.TemplateResponse(
  61. request=request,
  62. name="index.html",
  63. context={
  64. "request": request,
  65. "books": ["平凡的世界","活着","兄弟","围城"]
  66. }
  67. )