这一部分的内容主要是一些常见的配置,包括路由、静态文件等,还包括一些路径和文档的修饰器,包括简介、标签参数等内容。

配置静态文件

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:端口/路径/文件全名.后缀即可;

image-20221203191947908

路由配置

整体目录结构如下,主应用放在根目录下,其他的应用包放在和主应用同级目录下;

image-20221203194345896

  • 在应用包内新建应用stu01.py,同时在stu01应用内利用fastapi内的APIRouter创建fastapi应用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创建应用,再将应用挂载到主应用上即可;

image-20221203192516716

文档配置

app = FastAPI(
    # 创建一个FastAPI实例\这里的变量 app 会是 FastAPI 类的一个「实例」。\这个实例将是创建你所有 API 的主要交互对象。\这个 app 同样在命令中被 uvicorn 所引用:
    title='FastAPI学习教程文档——title',
    description='这是FastAPI教程的文档——description',
    version='1.0.0',
    docs_url='/docs',
    redoc_url='/redoc',
)

这个在项目开始中就提到了,这些元数据也都是设置文档的信息的,具体的效果参看下面的图片;

image-20221203193212996

路径配置

@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格式内容,但是缩进需要控制;

image-20221203193438599

响应描述配置

@app01.get(
    "/stu01/parameters",
    summary="响应summary",
    response_description="响应description"
           )
def path_params01():
    return {"message": "This is a message"}

和其他设置方法一样,直接在路径操作装饰器内设置元数据就行,具体的都可以参看源码。

image-20221203201820448

弃用路径操作

同上面的响应描述配置,在路径装饰器内设置deprecated=True即可:

@app01.get("/stu01/{str}", deprecated=True)

这样的配置只是在文档中展示为弃用状态,实际上这个请求依旧能用!

image-20221203202204038

另外,对于参数(路径参数、查询参数…)的设置,在前面第4小节中设置过,方法都大同小异:

https://blog.jiumoz.com/archives/fastapi-cong-ru-men-dao-shi-zhan-lu-jing-can-shu-yu-shu-zhi-xiao-yan#%E5%85%83%E6%95%B0%E6%8D%AE


感谢阅读!

九陌斋地址:https://blog.jiumoz.com/archives/fastapi-cong-ru-men-dao-shi-zhan-13-chang-jian-pei-zhi-xiang

欢 迎 关 注 博 主 个 人 小 程 序!