1fastapi.py 2.6 KB

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