python:Fastapi - 异常处理、路径配置及JSON编码器

简单絮叨一些

上篇文章主要唠了表单和文件上传等功能,这次主要是唠下异常处理、路径操作配置和JSON兼容编码器等。异常处理就是针对

某些情况下,需要向客户端返回错误提示。路径操作配置就是路径操作装饰器支持多种配置参数。JSON兼容器是在某些情况

下,您可能需要将数据类型转换为与 JSON 兼容的类型等,然后存储起来。



处理错误

使用HTTPException

某些情况下,需要向客户端返回错误提示。

需要向客户端返回错误提示的场景主要如下:

  • 客户端没有执行操作的权限
  • 客户端没有访问资源的权限
  • 客户端要访问的项目不存在
  • 等等 …

以上情况通常返回4xxHTTP状态码,4xx的状态码通常是指客户端发生的错误。

向客户端返回 HTTP 错误响应,可以使用 HTTPException,这也是fastapi默认。

from fastapi import FastAPI
from fastapi import HTTPException


app = FastAPI()

items = {
    "foo": "333_2222_666"
}


@app.get("/items/{item_id}")
async def read_item(item_id: str):
    """
    初次使用HTTPException
    :param item_id:
    :return:
    """
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    return {"item": items[item_id]}

注释信息:

  • raise HTTPException(status_code=404, detail="Item not found")是触发异常并抛出
  • detail="Item not found"参数 detail 传递任何能转换为 JSON 的值,不仅限于 str,还支持传递 dictlist 等数据结构

注意点:

  • Python 异常,不能 return,只能 raise

  • 使用return虽然不会报错,但牵扯到多层调用时,异常信息不一定会全部抛出,而raise是专门抛异常的关键字。

启动服务:

PS E:\git_code\python-code\fastapiProject> uvicorn handle_main:app --reload

请求接口:

GET http://127.0.0.1:8000/items/bee

请求结果:

{
    "detail": "Item not found"
}

因为bee不在items字典中,故触发异常并抛出异常信息。


添加自定义响应头

HTTP错误添加自定义信息头,暂时使用场景还没实操,可先了解下即可。

from fastapi import FastAPI
from fastapi import HTTPException

app = FastAPI()


@app.get("/items-header/{item_id}")
async def read_item_header(item_id: str):
    """
    自定义响应头
    :param item_id:
    :return:
    """
    if item_id not in items:
        raise HTTPException(
            status_code=404,
            detail="Item not found",
            headers={"H-Error": "This is an error message."}
        )
    return {"item": items[item_id]}

注释信息:

  • headers={"H-Error": "This is an error message."}添加自定义响应头

自定义异常处理器

自定义异常顾名思义就是自己去写

你可能感兴趣的:(fastapi,python,fastapi,测试开发,软件测试)