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、健康检查等企业级刚需
相关文章
|
2月前
|
安全 Java API
SpringBoot 4 黑科技:接口组 ——10 行代码管理 100+ API 客户端
Spring 7 新增「HTTP接口组」特性,告别重复`@Bean`声明与手动配置。通过`@ImportHttpServices`按业务分组(如github、stackoverflow),支持统一超时、Token、baseUrl等配置,Java代码+YAML双驱动,大幅降低配置冗余,提升可维护性与开发效率。(239字)
|
2月前
|
人工智能 API 机器人
OpenClaw 用户部署和使用指南汇总
本文档为OpenClaw(原MoltBot)官方使用指南,涵盖一键部署(阿里云轻量服务器年仅68元)、钉钉/飞书/企微等多平台AI员工搭建、典型场景实践及高频问题FAQ。同步更新产品化修复进展,助力用户高效落地7×24小时主动执行AI助手。
25110 166
|
2月前
|
缓存 NoSQL Java
JAVA面试题速记-redis知识点
Redis核心简介(240字内): Redis提供5种基础数据结构:String、Hash、List、Set、ZSet,及Geospatial等扩展类型。支持RDB快照与AOF日志双持久化机制,兼顾性能与安全;通过过期策略(定期+惰性+LRU)管理内存。应对缓存击穿/雪崩,采用错峰过期;保障缓存-数据库一致性,推荐异步Binlog监听+可靠MQ删除。分布式锁推荐Redisson(自动续期、原子Lua脚本)。高可用支持哨兵(主从故障转移)与集群(16384槽分片、水平扩展)。BigKey需拆分、异步删除(UNLINK)、lazy-free优化。
327 131
|
2月前
|
人工智能 缓存 Java
Spring AI 1.1 新特性详解:五大核心升级全面提升AI应用开发体验
Spring AI 1.1正式发布!新增Model Context Protocol(注解式工具注册)、Prompt缓存(降本90%)、递归顾问(自修正推理)、Google GenAI/ElevenLabs语音支持,及推理模式(输出思考步骤),全面提升AI应用开发效率与体验。(239字)
|
2月前
|
人工智能 安全 Go
使用MCP官方 Go SDK实现自己的MCP server
MCP(Model Context Protocol)是Anthropic推出的标准化协议,让AI安全调用外部工具。本文带你用官方Go SDK从零实现MCP服务器,支持“获取当前时间”和“读取本地文件”两个工具,并在VS Code中快速测试调用。(239字)
|
29天前
|
人工智能 自然语言处理 安全
保姆级图文教学!OpenClaw(Clawdbot)阿里云与本地部署与必装 Skills 精选及避坑指南
OpenClaw 是由 PSPDFKit 创始人 Peter Steinberger 于 2025 年 11 月推出的开源 AI Agent,其核心特性在于本地运行保障数据隐私,同时支持 WhatsApp、Telegram、Slack 等 12 个主流平台接入,后端可灵活适配 Claude、GPT-4o 或本地 Ollama 模型,不绑定任何云服务商。2026 年 1 月,该项目因商标纠纷在四天内完成两次更名(Clawdbot → Moltbot → OpenClaw),创始人加入 OpenAI 后项目移交开源基金会维护,截至 2026 年 3 月,GitHub Star 数已突破 220,0
1027 8
|
4月前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
4038 53
|
2月前
|
安全 IDE Java
IDEA 2025.3新特性: 让 Java 空安全落地更丝滑
JSpecify 1.0正式落地,Spring Boot 4、JUnit 6等已默认支持!本文详解IDEA 2025.3如何与NullAway协同实现真正一致的空安全:智能降噪、统一suppress、平滑迁移方案一应俱全——空安全,从此不止于注解。
|
2月前
|
人工智能 IDE Go
GoLand 2025.3 正式发布:Claude Agent 深度集成!
GoLand 2025.3 正式发布!新增实时资源泄漏检测、开箱即用Terraform支持、Junie×Claude双AI Agent协同、K8s全流程集成、无项目模式秒开.go文件、golangci-lint fmt深度整合,并启用护眼Islands默认主题,全面升级云原生开发体验。(239字)