1fastapi.py 3.4 KB

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