前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FastAPI从入门到实战(13)——常见配置项

FastAPI从入门到实战(13)——常见配置项

作者头像
MinChess
发布2022-12-27 20:00:03
1.5K0
发布2022-12-27 20:00:03
举报
文章被收录于专栏:九陌斋九陌斋

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

配置静态文件

代码语言:javascript
复制
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创建fastapi应用app01,接着针对app01进行代码编写即可;
代码语言:javascript
复制
# -*- 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内导入相关的应用
代码语言:javascript
复制
# -*- 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配置文档标识的,对请求无影响。
代码语言:javascript
复制
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创建应用,再将应用挂载到主应用上即可;

文档配置

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

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

路径配置

代码语言:javascript
复制
@app.get("/hello/{name}", tags=["默认"], summary="这个是summary")
async def say_hello(name: str):
    """
    这里是文档字符串,可以用MarkDown
    - 序号
    - 序号
    ## 二级标题
代码语言:javascript
复制
@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}"}

代码语言:txt
复制
```javascript

同文档配置,这些数据也都是针对每个请求的路径操作添加信息,是直接传递给路径装饰器函数的,并不能传递给路径操作函数,主要也是文档内的展示信息;

这里的docstring就是上面代码中"""包裹的内容,注意这部分内容不能和description同时展示,description会覆盖docstring,其中docstring支持解析MarkDown格式内容,但是缩进需要控制;

image-20221203193438599
image-20221203193438599

响应描述配置

代码语言:python
复制
@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-lu-jing-can-shu-yu-shu-zhi-xiao-yan#%E5%85%83%E6%95%B0%E6%8D%AE


感谢阅读!

九陌斋地址:https://cloud.tencent.com/developer/article/2200723

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配置静态文件
  • 路由配置
  • 文档配置
  • 路径配置
  • 响应描述配置
  • 弃用路径操作
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档