fwa 网站 欣赏,网站流量增加,郑州seo优化外包热狗网,深圳工作服制作FastAPI 响应状态码#xff1a;管理和自定义 HTTP Status Code
本文介绍了如何在 FastAPI 中声明、使用和修改 HTTP 状态码#xff0c;涵盖了常见的 HTTP 状态码分类#xff0c;如信息响应#xff08;1xx#xff09;、成功状态#xff08;2xx#xff09;、客户端错误管理和自定义 HTTP Status Code
本文介绍了如何在 FastAPI 中声明、使用和修改 HTTP 状态码涵盖了常见的 HTTP 状态码分类如信息响应1xx、成功状态2xx、客户端错误4xx和服务器错误5xx。通过 status_code 参数和 fastapi.status 常量简化开发并提供了如何根据业务需求动态调整状态码的方法。此外还介绍了如何通过 Response 参数在路径操作函数内部修改响应状态码以实现更精确的控制和更好的客户端交互体验。 文章目录 FastAPI 响应状态码管理和自定义 HTTP Status Code一 声明 HTTP 状态码二 HTTP 协议状态码三 使用 fastapi.status 中的变量四 使用 Response 参数更改状态码五 完整代码示例六 源码地址七 参考 在 FastAPI 中正确设置和管理 HTTP 状态码对于API的准确性和响应性至关重要。
一 声明 HTTP 状态码
from fastapi import FastAPI, statusapp FastAPI()app.post(/items/, status_code201)
async def create_item(name: str):return {name: name}status_code 参数属于装饰器中的参数而非 路径操作函数 的参数。它接收一个表示 HTTP 状态码的数字或支持 IntEnum 类型例如 Python 的 http.HTTPStatus。运行代码文件 chapter17.py 来启动应用
$ uvicorn chapter17:app --reload在 SwaggerUI 中可以查看在线文档http://127.0.0.1:8000/docs 。在文档中会code会有显示
二 HTTP 协议状态码
在 HTTP 协议中状态码是响应的一部分通常由三位数字组成并有便于识别的名称但关键仍是数字。常用状态码如下 1xx信息返回信息通常不包含响应体使用较少。 2xx 成功表示请求成功是最常用的状态码。 200成功默认状态码表示一切正常。201已创建通常在创建新资源时使用。204无内容表示没有响应体。 3xx 重定向表示重定向请求响应不一定包含内容。 304未修改表示资源未改变不返回响应体。 4xx 客户端错误表示请求有误。 400一般客户端错误。404未找到资源。 5xx服务器错误表示服务器问题通常由服务器或应用错误引发极少直接使用。
详解见 Web HTTP Status 。 在开发应用软件时有时会自定义非标准响应码这些响应码与标准的 HTTP 响应码不同。 三 使用 fastapi.status 中的变量
app.post(/items01/, status_codestatus.HTTP_201_CREATED)
async def create_item(name: str):return {name: name}可以使用 fastapi.status 中预定义的变量或通过 from starlette import status 导入。为了简化开发FastAPI 提供了与 starlette.status 相同的 fastapi.status该变量直接来源于 Starlette。以下是已定义的 HTTP status code 变量
HTTP_100_CONTINUE 100
HTTP_101_SWITCHING_PROTOCOLS 101
HTTP_102_PROCESSING 102
HTTP_103_EARLY_HINTS 103
HTTP_200_OK 200
HTTP_201_CREATED 201
HTTP_202_ACCEPTED 202
HTTP_203_NON_AUTHORITATIVE_INFORMATION 203
HTTP_204_NO_CONTENT 204
HTTP_205_RESET_CONTENT 205
HTTP_206_PARTIAL_CONTENT 206
HTTP_207_MULTI_STATUS 207
HTTP_208_ALREADY_REPORTED 208
HTTP_226_IM_USED 226
HTTP_300_MULTIPLE_CHOICES 300
HTTP_301_MOVED_PERMANENTLY 301
HTTP_302_FOUND 302
HTTP_303_SEE_OTHER 303
HTTP_304_NOT_MODIFIED 304
HTTP_305_USE_PROXY 305
HTTP_306_RESERVED 306
HTTP_307_TEMPORARY_REDIRECT 307
HTTP_308_PERMANENT_REDIRECT 308
HTTP_400_BAD_REQUEST 400
HTTP_401_UNAUTHORIZED 401
HTTP_402_PAYMENT_REQUIRED 402
HTTP_403_FORBIDDEN 403
HTTP_404_NOT_FOUND 404
HTTP_405_METHOD_NOT_ALLOWED 405
HTTP_406_NOT_ACCEPTABLE 406
HTTP_407_PROXY_AUTHENTICATION_REQUIRED 407
HTTP_408_REQUEST_TIMEOUT 408
HTTP_409_CONFLICT 409
HTTP_410_GONE 410
HTTP_411_LENGTH_REQUIRED 411
HTTP_412_PRECONDITION_FAILED 412
HTTP_413_REQUEST_ENTITY_TOO_LARGE 413
HTTP_414_REQUEST_URI_TOO_LONG 414
HTTP_415_UNSUPPORTED_MEDIA_TYPE 415
HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE 416
HTTP_417_EXPECTATION_FAILED 417
HTTP_418_IM_A_TEAPOT 418
HTTP_421_MISDIRECTED_REQUEST 421
HTTP_422_UNPROCESSABLE_ENTITY 422
HTTP_423_LOCKED 423
HTTP_424_FAILED_DEPENDENCY 424
HTTP_425_TOO_EARLY 425
HTTP_426_UPGRADE_REQUIRED 426
HTTP_428_PRECONDITION_REQUIRED 428
HTTP_429_TOO_MANY_REQUESTS 429
HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE 431
HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS 451
HTTP_500_INTERNAL_SERVER_ERROR 500
HTTP_501_NOT_IMPLEMENTED 501
HTTP_502_BAD_GATEWAY 502
HTTP_503_SERVICE_UNAVAILABLE 503
HTTP_504_GATEWAY_TIMEOUT 504
HTTP_505_HTTP_VERSION_NOT_SUPPORTED 505
HTTP_506_VARIANT_ALSO_NEGOTIATES 506
HTTP_507_INSUFFICIENT_STORAGE 507
HTTP_508_LOOP_DETECTED 508
HTTP_510_NOT_EXTENDED 510
HTTP_511_NETWORK_AUTHENTICATION_REQUIRED 511四 使用 Response 参数更改状态码
app.put(/get-or-create-task/{task_id}, status_code200)
def get_or_create_task(task_id: str, response: Response):if task_id not in tasks:tasks[task_id] This didnt exist beforeresponse.status_code status.HTTP_201_CREATEDreturn tasks[task_id]在路径操作函数中声明一个 Response 类型的参数根据业务逻辑修改状态码 response.status_code status.HTTP_201_CREATED 。
五 完整代码示例
from fastapi import FastAPI, status, Responseapp FastAPI()app.post(/items/, status_code201)
async def create_item(name: str):return {name: name}app.post(/items01/, status_codestatus.HTTP_201_CREATED)
async def create_item(name: str):return {name: name}tasks {foo: Listen to the Bar Fighters}app.put(/get-or-create-task/{task_id}, status_code200)
def get_or_create_task(task_id: str, response: Response):if task_id not in tasks:tasks[task_id] This didnt exist beforeresponse.status_code status.HTTP_201_CREATEDreturn tasks[task_id]
六 源码地址
详情见GitHub FastApiProj
七 参考
[1] FastAPI 文档