126 lines
2.6 KiB
Python
126 lines
2.6 KiB
Python
from typing import Generic, Optional, TypeVar
|
|
|
|
from pydantic import BaseModel, Field
|
|
from pydantic.generics import GenericModel
|
|
|
|
T = TypeVar("T")
|
|
|
|
|
|
class Response(GenericModel, Generic[T]):
|
|
code: int = 200
|
|
data: Optional[T]
|
|
msg: str = "请求成功"
|
|
|
|
|
|
from datetime import datetime
|
|
|
|
|
|
class ReadBase(BaseModel):
|
|
"""数据读取的基类"""
|
|
|
|
id: int
|
|
status: int = Field(default=1, description="数据状态 1正常默认值 9 删除 5使用中 ")
|
|
created: datetime
|
|
modified: datetime
|
|
|
|
|
|
from typing import Any, Callable, get_type_hints
|
|
|
|
from fastapi import routing
|
|
|
|
|
|
class Route(routing.APIRoute):
|
|
"""
|
|
https://github.com/tiangolo/fastapi/issues/620
|
|
Django挂载视图方法
|
|
def index() -> User:
|
|
pass
|
|
Route("/", endpoint=index)
|
|
"""
|
|
|
|
def __init__(
|
|
self,
|
|
path: str,
|
|
endpoint: Callable[..., Any],
|
|
tags: list[str],
|
|
summary: str,
|
|
**kwargs: Any
|
|
):
|
|
if kwargs.get("response_model") is None:
|
|
kwargs["response_model"] = get_type_hints(endpoint).get("return")
|
|
super(Route, self).__init__(
|
|
path=path, endpoint=endpoint, tags=tags, summary=summary, **kwargs
|
|
)
|
|
|
|
@classmethod
|
|
def post(
|
|
cls,
|
|
path: str,
|
|
endpoint: Callable[..., Any],
|
|
tags: list[str],
|
|
summary: str,
|
|
**kwargs: Any
|
|
):
|
|
return Route(
|
|
path=path,
|
|
endpoint=endpoint,
|
|
methods=["POST"],
|
|
tags=tags,
|
|
summary=summary,
|
|
**kwargs
|
|
)
|
|
|
|
@classmethod
|
|
def get(
|
|
cls,
|
|
path: str,
|
|
endpoint: Callable[..., Any],
|
|
tags: list[str],
|
|
summary: str,
|
|
**kwargs: Any
|
|
):
|
|
return Route(
|
|
path=path,
|
|
endpoint=endpoint,
|
|
methods=["GET"],
|
|
tags=tags,
|
|
summary=summary,
|
|
**kwargs
|
|
)
|
|
|
|
@classmethod
|
|
def delete(
|
|
cls,
|
|
path: str,
|
|
endpoint: Callable[..., Any],
|
|
tags: list[str],
|
|
summary: str,
|
|
**kwargs: Any
|
|
):
|
|
return Route(
|
|
path=path,
|
|
endpoint=endpoint,
|
|
methods=["DELETE"],
|
|
tags=tags,
|
|
summary=summary,
|
|
**kwargs
|
|
)
|
|
|
|
@classmethod
|
|
def put(
|
|
cls,
|
|
path: str,
|
|
endpoint: Callable[..., Any],
|
|
tags: list[str],
|
|
summary: str,
|
|
**kwargs: Any
|
|
):
|
|
return Route(
|
|
path=path,
|
|
endpoint=endpoint,
|
|
methods=["PUT"],
|
|
tags=tags,
|
|
summary=summary,
|
|
**kwargs
|
|
)
|