1. MyBoot 是什么?

  • Python 世界的 Spring Boot 影子
  • 约定优于配置 + 自动配置 + 依赖注入
  • 内置 Hypercorn(HTTP/2)、Cron、健康检查、优雅关机、Swagger…
  • 单文件即可启动,也能按「Controller-Service-Repository」分层
Spring Boot MyBoot 等价
@SpringBootApplication create_app()
@RestController @RestController(同名)
@Service @service()
@GetMapping @get(...)
application.yml conf/config.yaml
DevTools --reload 自动重载

2. 30 秒初始化项目

pip install -U myboot
myboot init --name user-crud-app --template basic
cd user-crud-app
tree -L 2

目录结构(已对齐 Maven 习惯):

user-crud-app
├── main.py
├── app
│   ├── api/        # ← Controller
│   ├── service/    # ← Service
│   ├── model/      # ← DTO/Entity
│   └── ...
├── conf
│   └── config.yaml
└── tests/

3. 定义模型(Pydantic 版 DTO)

app/model/user.py

from pydantic import BaseModel, Field
from typing import Optional

class User(BaseModel):
    id: Optional[int] = None
    name: str
    email: str
    age: Optional[int] = None

class UserCreate(User):
    id: None = None   # 创建时不允许带 id

class UserUpdate(BaseModel):
    name: Optional[str] = None
    email: Optional[str] = None
    age: Optional[int] = None

4. Service + 依赖注入

app/service/user_service.py

from typing import List, Optional, Dict
from myboot import service
from app.model.user import User, UserCreate, UserUpdate

@service()                      # ← 等价于 @Service
class UserService:
    _db: Dict[int, User] = {}
    _seq: int = 1

    def get_all(self) -> List[User]:
        return list(self._db.values())

    def get(self, uid: int) -> Optional[User]:
        return self._db.get(uid)

    def create(self, dto: UserCreate) -> User:
        user = User(id=self._seq, **dto.dict())
        self._db[self._seq] = user
        self._seq += 1
        return user

    def update(self, uid: int, dto: UserUpdate) -> Optional[User]:
        user = self._db.get(uid)
        if not user:
            return None
        for k, v in dto.dict(exclude_unset=True).items():
            setattr(user, k, v)
        return user

    def delete(self, uid: int) -> bool:
        return self._db.pop(uid, None) is not None

内存 Map 模拟 DB,重点看 @service() 即可。


5. Controller & 统一返回体

app/api/routes.py

from typing import List
from myboot import RestController, get, post, put, delete
from myboot.web import BaseResponse
from app.model.user import User, UserCreate, UserUpdate
from app.service.user_service import UserService

@RestController
class UserController:
    # 构造器注入(官方 IoC 容器自动装配)
    def __init__(self, svc: UserService):
        self.svc = svc

    @post("/users", response_model=BaseResponse[User])
    def create(self, dto: UserCreate) -> BaseResponse[User]:
        return BaseResponse.success(self.svc.create(dto))

    @get("/users", response_model=BaseResponse[List[User]])
    def list(self) -> BaseResponse[List[User]]:
        return BaseResponse.success(self.svc.get_all())

    @get("/users/{uid}", response_model=BaseResponse[User])
    def get(self, uid: int) -> BaseResponse[User]:
        user = self.svc.get(uid)
        return BaseResponse.success(user) if user else BaseResponse.not_found()

    @put("/users/{uid}", response_model=BaseResponse[User])
    def update(self, uid: int, dto: UserUpdate) -> BaseResponse[User]:
        user = self.svc.update(uid, dto)
        return BaseResponse.success(user) if user else BaseResponse.not_found()

    @delete("/users/{uid}", response_model=BaseResponse[str])
    def delete(self, uid: int) -> BaseResponse[str]:
        ok = self.svc.delete(uid)
        return BaseResponse.success("deleted") if ok else BaseResponse.not_found()

BaseResponse 已内置 success/data/message/code,前端无需再封装。


6. 启动类

main.py

from myboot import create_app

app = create_app(name="user-crud")
# 自动扫描同级 app 包下的所有 @RestController / @service

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000, reload=True)

一行配置都不写,默认读取 conf/config.yaml.env


7. 运行 & 实测

python main.py

响应示例:

{
  "code": 0,
  "message": "OK",
  "data": { "id": 1, "name": "Tom", "email": "tom@a.com", "age": 30 }
}

8. 打包部署

myboot build                  # 生成 dist/user-crud-0.0.1-bin.tar.gz
tar -xzf dist/user-crud-0.0.1-bin.tar.gz
./bin/user-crud start         # 生产环境 systemd 可直接托管

9. 小结

  1. 全程只写 业务代码,无样板配置
  2. 注解与 Spring Boot 同名同义,秒切换技术栈
  3. 自带依赖注入、统一返回、热加载、Swagger、健康检查等企业级刚需
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐