这一部分的内容主要是一些常见的配置,包括路由、静态文件等,还包括一些路径和文档的修饰器,包括简介、标签参数等内容。
配置静态文件
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
配置静态文件需要导入
fastapi
内对应的staticfiles
包,然后利用mount
方法将对应的静态文件目录挂载到app
应用上即可;对于参数,参数
/static
指定挂载的路径,即客户端访问的根路径;参数StaticFiles
指定挂载的是静态文件;参数directory="static"
指定静态文件的目录;name="static"
指定fastapi
内部识别的名称;访问效果如下,直接在浏览器输入
ip:端口/路径/文件全名.后缀
即可;
路由配置
整体目录结构如下,主应用放在根目录下,其他的应用包放在和主应用同级目录下;
- 在应用包内新建应用
stu01.py
,同时在stu01
应用内利用fastapi
内的APIRouter
创建fastap
i应用app01
,接着针对app01
进行代码编写即可;
# -*- coding: utf-8 -*-
# @Time: 2022/11/24 16:24
# @Author: MinChess
# @File: stu01.py
# @Software: PyCharm
from fastapi import APIRouter,Path
from enum import Enum
app01 = APIRouter()
@app01.get("/stu01/parameters")
def path_params01():
return {"message": "This is a message"}
- 在
stu
包的__init__.py
内导入相关的应用
# -*- coding: utf-8 -*-
# @Time: 2022/11/24 16:24
# @Author: MinChess
# @File: __init__.py.py
# @Software: PyCharm
from .stu01 import app01
from .stu02 import app02
from .stu03 import app03
from .stu04 import app04
from .stu05 import app05
from .stu06 import app06
from .stu07 import app07
from .stu08 import app08
- 在主程序中导入相关的应用
from stu import app01, app02, app03, app04, app05, app06, app07, app08
,接着利用include_router
将子应用挂载到主应用程序上,参数app01
指定挂载的子应用,prefix='/stu'
表示子应用的访问路径,tags
是指定文档内对应应用的标签;tags
配置文档标识的,对请求无影响。
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse, PlainTextResponse, HTMLResponse
from fastapi.exceptions import RequestValidationError
from fastapi.staticfiles import StaticFiles
from stu import app01, app02, app03, app04, app05, app06, app07, app08
app = FastAPI(
title='FastAPI学习教程文档——title',
description='这是FastAPI教程的文档——description',
version='1.0.0',
docs_url='/docs',
redoc_url='/redoc',
)
app.include_router(app01, prefix='/stu', tags=['路径参数与数值参数校验'])
app.include_router(app02, prefix='/stu', tags=['查询参数与字符串参数校验'])
app.include_router(app03, prefix="/stu", tags=['请求体与混合参数'])
app.include_router(app04, prefix="/stu", tags=['请求体函数参数设置'])
app.include_router(app05, prefix="/stu", tags=['cookie和header参数设置'])
app.include_router(app06, prefix="/stu", tags=['响应模型与状态码'])
app.include_router(app07, prefix="/stu", tags=['表单请求与上传文件'])
app.include_router(app08, prefix="/stu", tags=['错误处理和更新请求体'])
配置路由是比较简单的,新建
python
包,在python
包内利用APIRouter
创建应用,再将应用挂载到主应用上即可;
文档配置
app = FastAPI(
# 创建一个FastAPI实例\这里的变量 app 会是 FastAPI 类的一个「实例」。\这个实例将是创建你所有 API 的主要交互对象。\这个 app 同样在命令中被 uvicorn 所引用:
title='FastAPI学习教程文档——title',
description='这是FastAPI教程的文档——description',
version='1.0.0',
docs_url='/docs',
redoc_url='/redoc',
)
这个在项目开始中就提到了,这些元数据也都是设置文档的信息的,具体的效果参看下面的图片;
路径配置
@app.get("/hello/{name}", tags=["默认"], summary="这个是summary")
async def say_hello(name: str):
"""
这里是文档字符串,可以用MarkDown
- 序号
- 序号
## 二级标题
```
@app.exception_handler(StarletteHTTPException)
async def http_exception_handler(request, exc):
print(f"全局异常:{request.method}URL{request.url}Headers:{request.headers}{traceback.format_exc()}")
return PlainTextResponse(str(exc.detail), status_code=exc.status_code)
```
"""
return {"message": f"Hello {name}"}
同文档配置,这些数据也都是针对每个请求的路径操作添加信息,是直接传递给路径装饰器函数的,并不能传递给路径操作函数,主要也是文档内的展示信息;
这里的
docstring
就是上面代码中"""
包裹的内容,注意这部分内容不能和description
同时展示,description
会覆盖docstring
,其中docstring
支持解析MarkDown
格式内容,但是缩进需要控制;
响应描述配置
@app01.get(
"/stu01/parameters",
summary="响应summary",
response_description="响应description"
)
def path_params01():
return {"message": "This is a message"}
和其他设置方法一样,直接在路径操作装饰器内设置元数据就行,具体的都可以参看源码。
弃用路径操作
同上面的响应描述配置,在路径装饰器内设置deprecated=True即可:
@app01.get("/stu01/{str}", deprecated=True)
这样的配置只是在文档中展示为弃用状态,实际上这个请求依旧能用!
另外,对于参数(路径参数、查询参数…)的设置,在前面第4小节中设置过,方法都大同小异:
感谢阅读!
九陌斋地址:https://blog.jiumoz.com/archives/fastapi-cong-ru-men-dao-shi-zhan-13-chang-jian-pei-zhi-xiang
评论区