Python MyBoot入门:像写SpringBoot 一样写python

简介: MyBoot是Python版Spring Boot,主打“约定优于配置”,支持自动装配、依赖注入与类Spring注解(如@RestController/@service)。内置HTTP/2、Swagger、健康检查等,单文件启动,30秒初始化项目,零样板配置,专为快速开发企业级API而生。

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、健康检查等企业级刚需
相关文章
|
3月前
|
安全 Java API
SpringBoot 4 黑科技:接口组 ——10 行代码管理 100+ API 客户端
Spring 7 新增「HTTP接口组」特性,告别重复`@Bean`声明与手动配置。通过`@ImportHttpServices`按业务分组(如github、stackoverflow),支持统一超时、Token、baseUrl等配置,Java代码+YAML双驱动,大幅降低配置冗余,提升可维护性与开发效率。(239字)
304 3
|
3月前
|
人工智能 API 机器人
OpenClaw 用户部署和使用指南汇总
本文档为OpenClaw(原MoltBot)官方使用指南,涵盖一键部署(阿里云轻量服务器年仅68元)、钉钉/飞书/企微等多平台AI员工搭建、典型场景实践及高频问题FAQ。同步更新产品化修复进展,助力用户高效落地7×24小时主动执行AI助手。
29206 253
|
3月前
|
人工智能 缓存 Java
Spring AI 1.1 新特性详解:五大核心升级全面提升AI应用开发体验
Spring AI 1.1正式发布!新增Model Context Protocol(注解式工具注册)、Prompt缓存(降本90%)、递归顾问(自修正推理)、Google GenAI/ElevenLabs语音支持,及推理模式(输出思考步骤),全面提升AI应用开发效率与体验。(239字)
630 3
|
5月前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
4648 59
|
3月前
|
JavaScript 安全 Java
Maven 4 终于来了!5 个最实用的新特性,看这一篇就够了(附超简单示例)
Apache Maven 4.0(2025年底GA)是20年来最大架构升级,非颠覆而是进化:兼容现有pom.xml,无需大改即可享受5大实用新特性——子模块自动发现、父版本自动推断、原生动态版本、消费者POM精简发布、智能构建恢复。仅需JDK 17+,平滑迁移,更简洁、更智能、更可靠!
723 2
|
3月前
|
人工智能 安全 Go
使用MCP官方 Go SDK实现自己的MCP server
MCP(Model Context Protocol)是Anthropic推出的标准化协议,让AI安全调用外部工具。本文带你用官方Go SDK从零实现MCP服务器,支持“获取当前时间”和“读取本地文件”两个工具,并在VS Code中快速测试调用。(239字)
502 1
|
3月前
|
自然语言处理 Go 开发工具
Go 1.25 新特性:正式支持 Git 仓库子目录作为 Go 模块
Go 1.25 正式支持 Git 子目录作为模块根路径,终结了长期限制——模块必须置于仓库根目录。现可在 monorepo 中按需在子目录(如 `/libs/math`)定义独立模块,通过扩展的 `go-import` 标签精准定位,兼顾工程规范与多语言协作,大幅提升大型项目组织灵活性。(239字)
260 1