| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- # -*- coding: utf-8 -*-
- from typing import Any, Mapping
- from fastapi import status
- from fastapi.responses import JSONResponse, StreamingResponse, FileResponse
- from starlette.background import BackgroundTask
- from pydantic import Field, BaseModel
- from app.common.constant import RET
- class ResponseSchema(BaseModel):
- """响应模型"""
- code: int = Field(default=RET.OK.code, description="业务状态码")
- msg: str = Field(default=RET.OK.msg, description="响应消息")
- data: Any = Field(default=None, description="响应数据")
- status_code: int = Field(default=status.HTTP_200_OK, description="HTTP状态码")
- success: bool = Field(default=True, description='操作是否成功')
- class SuccessResponse(JSONResponse):
- """成功响应类"""
- def __init__(
- self,
- data: Any = None,
- msg: str = RET.OK.msg,
- code: int = RET.OK.code,
- status_code: int = status.HTTP_200_OK,
- success: bool = True
- ) -> None:
- """
- 初始化成功响应类
-
- 参数:
- - data (Any | None): 响应数据。
- - msg (str): 响应消息。
- - code (int): 业务状态码。
- - status_code (int): HTTP 状态码。
- - success (bool): 操作是否成功。
-
- 返回:
- - None
- """
- content = ResponseSchema(
- code=code,
- msg=msg,
- data=data,
- status_code=status_code,
- success=success
- ).model_dump()
- super().__init__(content=content, status_code=status_code)
- class ErrorResponse(JSONResponse):
- """错误响应类"""
- def __init__(
- self,
- data: Any = None,
- msg: str = RET.ERROR.msg,
- code: int = RET.ERROR.code,
- status_code: int = status.HTTP_400_BAD_REQUEST,
- success: bool = False
- ) -> None:
- """
- 初始化错误响应类
-
- 参数:
- - data (Any): 响应数据。
- - msg (str): 响应消息。
- - code (int): 业务状态码。
- - status_code (int): HTTP 状态码。
- - success (bool): 操作是否成功。
-
- 返回:
- - None
- """
- content = ResponseSchema(
- code=code,
- msg=msg,
- data=data,
- status_code=status_code,
- success=success
- ).model_dump()
- super().__init__(content=content, status_code=status_code)
- class StreamResponse(StreamingResponse):
- """流式响应类"""
- def __init__(
- self,
- data: Any = None,
- status_code: int = status.HTTP_200_OK,
- headers: Mapping[str, str] | None = None,
- media_type: str | None = None,
- background: BackgroundTask | None = None
- ) -> None:
- """
- 初始化流式响应类
-
- 参数:
- - data (Any): 响应数据。
- - status_code (int): HTTP 状态码。
- - headers (Mapping[str, str] | None): 响应头。
- - media_type (str | None): 媒体类型。
- - background (BackgroundTask | None): 后台任务。
-
- 返回:
- - None
- """
- super().__init__(
- content=data,
- status_code=status_code,
- media_type=media_type, # 文件类型
- headers=headers, # 文件名
- background=background # 文件大小
- )
- class UploadFileResponse(FileResponse):
- """
- 文件响应
- """
- def __init__(
- self,
- file_path: str,
- filename: str,
- media_type: str = "application/octet-stream",
- headers: Mapping[str, str] | None = None,
- background: BackgroundTask | None = None,
- status_code: int = 200
- ):
- """
- 初始化文件响应类
-
- 参数:
- - file_path (str): 文件路径。
- - filename (str): 文件名。
- - media_type (str): 文件类型。
- - headers (Mapping[str, str] | None): 响应头。
- - background (BackgroundTask | None): 后台任务。
- - status_code (int): HTTP 状态码。
-
- 返回:
- - None
- """
- super().__init__(
- path=file_path,
- status_code=status_code,
- headers=headers,
- media_type=media_type,
- background=background,
- filename=filename,
- stat_result=None,
- method=None,
- content_disposition_type="attachment"
- )
|