diff --git a/backend/controller/common.py b/backend/controller/common.py index b40b2ac..71098b5 100644 --- a/backend/controller/common.py +++ b/backend/controller/common.py @@ -1,7 +1,6 @@ -from core import Response from core.security import generate_token, verify_password from dbhelper.user import get_user -from schemas.common import LoginForm, LoginResult +from schemas import LoginForm, LoginResult, Response async def login(auth_data: LoginForm) -> Response[LoginResult]: diff --git a/backend/controller/menu.py b/backend/controller/menu.py index 16ba0cb..00cf085 100644 --- a/backend/controller/menu.py +++ b/backend/controller/menu.py @@ -1,6 +1,5 @@ -from core import Response from dbhelper.menu import insert_menu -from schemas.menu import MenuIn, MenuRead +from schemas import MenuIn, MenuRead, Response async def menu_add(data: MenuIn) -> Response[MenuRead]: diff --git a/backend/controller/role.py b/backend/controller/role.py index d918d9f..34693a6 100644 --- a/backend/controller/role.py +++ b/backend/controller/role.py @@ -1,9 +1,8 @@ import json -from core import Response from core.utils import list_to_tree from dbhelper.role import get_role_menus, new_role -from schemas.role import RoleIn, RoleInfo +from schemas import Response, RoleIn, RoleInfo async def role_add(data: RoleIn) -> Response[RoleInfo]: diff --git a/backend/controller/user.py b/backend/controller/user.py index 9ce6cae..7702a91 100644 --- a/backend/controller/user.py +++ b/backend/controller/user.py @@ -1,10 +1,9 @@ from fastapi import Query -from core import Response from core.security import get_password_hash from dbhelper.user import get_user, get_user_info, get_users, insert_user, new_user +from schemas import Response, UserAdd, UserIn, UserInfo, UserList, UserQuery, UserRead from schemas.common import ListAll -from schemas.user import UserAdd, UserIn, UserInfo, UserList, UserQuery, UserRead async def user_add(data: UserAdd) -> Response[UserInfo]: diff --git a/backend/core/__init__.py b/backend/core/__init__.py index 3d14a10..8b13789 100644 --- a/backend/core/__init__.py +++ b/backend/core/__init__.py @@ -1,125 +1 @@ -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 - ) diff --git a/backend/mini.db b/backend/mini.db index e2a2455..89b135b 100644 Binary files a/backend/mini.db and b/backend/mini.db differ diff --git a/backend/mini.db-shm b/backend/mini.db-shm deleted file mode 100644 index 089db77..0000000 Binary files a/backend/mini.db-shm and /dev/null differ diff --git a/backend/mini.db-wal b/backend/mini.db-wal deleted file mode 100644 index 9f19091..0000000 Binary files a/backend/mini.db-wal and /dev/null differ diff --git a/backend/core/table.py b/backend/models/common.py similarity index 100% rename from backend/core/table.py rename to backend/models/common.py diff --git a/backend/models/menu.py b/backend/models/menu.py index 5c914dd..4f7e57b 100644 --- a/backend/models/menu.py +++ b/backend/models/menu.py @@ -1,4 +1,4 @@ -from core.table import Table, fields +from models.common import Table, fields class MenuModel(Table): diff --git a/backend/models/relation.py b/backend/models/relation.py index d5276e2..ccf0a5f 100644 --- a/backend/models/relation.py +++ b/backend/models/relation.py @@ -1,4 +1,4 @@ -from core.table import Table, fields +from models.common import Table, fields class RoleRelationMixin: diff --git a/backend/models/role.py b/backend/models/role.py index b7d3072..0db44f9 100644 --- a/backend/models/role.py +++ b/backend/models/role.py @@ -1,4 +1,4 @@ -from core.table import Table, fields +from models.common import Table, fields class RoleModel(Table): diff --git a/backend/models/user.py b/backend/models/user.py index b18d171..5e1132e 100644 --- a/backend/models/user.py +++ b/backend/models/user.py @@ -1,4 +1,4 @@ -from core.table import Table, fields +from models.common import Table, fields class UserModel(Table): diff --git a/backend/router/url.py b/backend/router/url.py index a0131e3..18d6154 100644 --- a/backend/router/url.py +++ b/backend/router/url.py @@ -1,8 +1,108 @@ +from typing import Any, Callable, get_type_hints + +from fastapi import routing + from controller.common import login from controller.menu import menu_add from controller.role import role_add, role_has_menu from controller.user import create_user, user_arr, user_info, user_list -from core import Route + + +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 + ) + routes = [ Route.post("/login", endpoint=login, tags=["公共"], summary="登录"), diff --git a/backend/schemas/__init__.py b/backend/schemas/__init__.py index e69de29..e20bfde 100644 --- a/backend/schemas/__init__.py +++ b/backend/schemas/__init__.py @@ -0,0 +1,4 @@ +from schemas.common import * +from schemas.menu import * +from schemas.role import * +from schemas.user import * diff --git a/backend/schemas/common.py b/backend/schemas/common.py index e72509b..e116b9d 100644 --- a/backend/schemas/common.py +++ b/backend/schemas/common.py @@ -1,5 +1,6 @@ """公共模型""" -from typing import Generic, TypeVar +from datetime import datetime +from typing import Generic, Optional, TypeVar from pydantic import BaseModel, Field from pydantic.generics import GenericModel @@ -7,6 +8,21 @@ from pydantic.generics import GenericModel T = TypeVar("T") +class Response(GenericModel, Generic[T]): + code: int = 200 + data: Optional[T] + msg: str = "请求成功" + + +class ReadBase(BaseModel): + """数据读取的基类""" + + id: int + status: int = Field(default=1, description="数据状态 1正常默认值 9 删除 5使用中 ") + created: datetime + modified: datetime + + class LoginForm(BaseModel): """用户登录参数""" diff --git a/backend/schemas/role.py b/backend/schemas/role.py index 0b0cb86..5f9ac52 100644 --- a/backend/schemas/role.py +++ b/backend/schemas/role.py @@ -1,8 +1,8 @@ from pydantic import BaseModel, Field from tortoise.contrib.pydantic import pydantic_model_creator -from core import ReadBase from models import RoleModel +from schemas.common import ReadBase RoleRed = pydantic_model_creator(RoleModel, name="RoleOut") diff --git a/backend/schemas/user.py b/backend/schemas/user.py index d64406b..67d94df 100644 --- a/backend/schemas/user.py +++ b/backend/schemas/user.py @@ -8,7 +8,7 @@ from schemas.common import QueryData UserRole = pydantic_model_creator(UserRoleModel, name="UserRole", exclude_readonly=True) -from core import ReadBase +from schemas.common import ReadBase class UserBasic(BaseModel):