1 Star 0 Fork 0

Gitee 极速下载/utilmeta-py

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。 原始仓库: https://github.com/utilmeta/utilmeta-py
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

UtilMeta Python 框架

UtilMeta 是一个面向服务端应用的渐进式 Python 后端元框架,基于 Python 类型注解标准高效构建声明式 API 与 ORM,支持使用主流 Python 框架作为运行时实现或渐进式整合

安装

pip install -U utilmeta

UtilMeta 需要 Python >= 3.8

核心特性

声明式 API 与 ORM

你可以使用 UtilMeta 框架的声明式 API 与 ORM 语法轻松构建 RESTful API, 下面是一个来自 mini_blog/blog/api.py 的示例

from utilmeta.core import api, orm
from .models import User, Article
from django.db import models

class UserSchema(orm.Schema[User]):
    username: str
    articles_num: int = models.Count('articles')

class ArticleSchema(orm.Schema[Article]):
    id: int
    author: UserSchema
    content: str

class ArticleAPI(api.API):
    async def get(self, id: int) -> ArticleSchema:
        return await ArticleSchema.ainit(id)

当年请求 GET /article?id=1 到 ArticleAPI,API 会返回类似如下的响应

{
  "id": 1,
  "author": {
    "username": "alice",
    "articles_num": 3
  },
  "content": "hello world"
}

可以看到它与你在代码中的声明完全一致,UtilMeta 会自动生成优化后的 ORM 查询,并将结果转化为你定义的类型与结构,自动避免 N+1 查询问题,并且会根据你的声明生成对应的 OpenAPI 文档

渐进式元框架

UtilMeta 内置了一套标准支持大部分主流 Python 框架作为 HTTP 运行时实现,灵活兼容多种技术栈,支持异步接口

当前支持的框架包括

  • Django (与 Django REST framework)
  • Flask (与 APIFlask)
  • FastAPI (与 Starlette)
  • Sanic
  • Tornado

你可以仅用一个参数切换 API 服务的整个底层实现,比如下面的 hello world 示例代码

from utilmeta import UtilMeta
from utilmeta.core import api
import django

class RootAPI(api.API):
    @api.get
    def hello(self):
        return 'world'

service = UtilMeta(
    __name__,
    name='demo',
    backend=django,    # or flask / starlette / tornado / sanic
    api=RootAPI,
    route='/api'
)

app = service.application()  # wsgi app

if __name__ == '__main__':
    service.run()

你可以创建一个 Python 文件写入并运行以上代码试试看

快速开始

你可以通过 clone 仓库并运行其中的示例项目来快速开始

pip install -U utilmeta
git clone https://github.com/utilmeta/utilmeta-py
cd utilmeta-py/examples/mini_blog
meta migrate        # 生成数据库
meta run            # 或 python server.py

当看到如下提示即说明启动成功

| UtilMeta (version) starting service [blog]
|     version: 0.1.0
|       stage: ● debug
|     backend: fastapi (version) | asynchronous
|    base url: http://127.0.0.1:8080

连接你的 API

当我们启动项目时,我们会看到以下的输出

UtilMeta OperationsAPI loaded at http://127.0.0.1:8080/ops, connect your APIs at https://ops.utilmeta.com

说明项目的运维管理 API 成功加载,我们可以直接点击这个连接: https://ops.utilmeta.com/localhost?local_node=http://127.0.0.1:8080/ops 连接到你的 API 服务

点击左侧 API 板块即可看到生成的 API 文档 本地 API 在连接平台后可以使用以下功能

  • Data: 数据管理 CRUD,比如在上面的例子中,你可以进入添加 userarticle 实例
  • API:查看并调试自动生成的 API 文档
  • Logs:查询实时请求日志,包括请求和响应的数据,错误调用栈等
  • Servers:查询服务依赖的资源的实时监控数据,如服务器,数据库,缓存

使用其他的功能需要连接有公开访问地址的 API 服务

如何阅读本文档

我们设计了几个由易到难的入门案例由浅入深地涵盖了大部分框架的用法,你可以按照下面的顺序阅读与学习

  1. BMI 计算 API
  2. 用户注册登录查询 API
  3. Realworld 博客项目
  4. Websocket 聊天室(即将提供)

如果你更希望从具体功能或用法入手学习,则可以参考

  • 处理请求参数:如何处理路径参数,查询参数,请求体和请求头,以及如何处理文件上传
  • API 类与接口路由:如何使用 API 类挂载简洁地定义树状接口路由,以及利用钩子等特性方便地在接口间复用代码,处理错误,模板化响应
  • 数据查询与 ORM 操作:如何使用 Schema 声明式地编写 RESTful 接口所需要的增删改查和 ORM 操作
  • 接口与用户鉴权:如何使用 Session, JWT, OAuth 等方式为接口的请求鉴权,获取当前请求用户与简化登录操作
  • 声明式 Web 客户端:使用与 API 类一致的声明式语法快速编写客户端 SDK 代码,以及为现有的 UtilMeta 服务与 OpenAPI 文档自动生成客户端代码

如果你已经开发好了 UtilMeta 项目,希望了解如何配置,部署与运维管理你的 API 服务,可以参考

  • 配置运行与部署:如何使用声明式环境变量等特性配置服务的运行设置,启动与部署
  • 运维监控与服务管理:如何配置 UtilMeta 的运维管理系统,全方位观测与管理本地与在线的 API 服务,以及连接你的现有 Django, Flask, FastAPI, Sanic 应用

社区

添加作者微信 (voidZXL) 加入开发者群,验证信息 UtilMeta

drawing
Copyright (c) 2019-present Xulin Zhou (周煦林) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

UtilMeta 是一个面向服务端应用的渐进式元框架,基于 Python 类型注解标准高效构建声明式接口,支持使用主流 Python 框架作为运行时实现或渐进式整合 核心特性 渐进 展开 收起
README
Apache-2.0
取消

发行版

暂无发行版

贡献者 (2)

全部

语言

近期动态

1年多前创建了仓库
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/mirrors/utilmeta-py.git
git@gitee.com:mirrors/utilmeta-py.git
mirrors
utilmeta-py
utilmeta-py
main

搜索帮助