最近开源了我开发多年的一个 Python 后端框架:UtilMeta

项目介绍

UtilMeta 是一个用于开发 API 服务的后端元框架,基于 Python 类型注解标准高效构建声明式接口与 ORM 查询,能够自动解析请求参数与生成 OpenAPI 文档,高效开发 RESTful 接口,产出的代码简洁清晰,并且支持使用主流 Python 框架(如 Django, Flask, FastAPI, Starlette, Sanic, Tornado 等)作为运行时实现或渐进式整合

安装

pip install utilmeta

核心特性

声明式接口开发

使用 UtilMeta 框架提供的声明能力,你可以轻松开发自动校验请求与生成 OpenAPI 文档的接口,也可以编写简洁的声明式 ORM 查询(支持关系对象查询且自动避免 N + 1 问题)

下面的例子是基于 Django 模型开发一个简洁的文章查询接口

from utilmeta.core import api, orm
from django.db import models class User(models.Model):
username = models.CharField(max_length=20, unique=True) class Article(models.Model):
author = models.ForeignKey(User, related_name="articles", on_delete=models.CASCADE)
content = models.TextField() 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,则会得到类似如下的结果

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

完全符合你的模式声明,并且会自动生成对应的 OpenAPI 文档,如

简洁的声明式开发可以显著降低接口开发的代码量,比如 UtilMeta 仅用 600 行代码就实现了 Realworld 博客后端, 与其他框架的对比如下

渐进式元框架

使用一套标准支持主流 Python 框架作为 HTTP 运行时实现,切换运行时实现只需要一个参数

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()

并且支持以接口为粒度渐进式接入现有项目,比如 Flask

from flask import Flask
from utilmeta.core import api, response app = Flask(__name__) @app.route("/")
def hello_world():
return "<p>Hello, World!</p>" class CalcAPI(api.API):
@api.get
def add(self, a: int, b: int) -> int:
return a + b CalcAPI.__as__(app, route='/calc')

高度可扩展与丰富的插件

内置一系列开箱即用的鉴权(Session / JWT),跨域处理,重试,请求控制,事务等插件

全周期监控运维解决方案

UtilMeta 框架配套了一个全周期的 API 管理平台,可以一站式解决中小团队的接口文档调试,日志查询,服务器监控,报警通知与事件管理等运维与管理需求(目前处于 Beta waitlist)

快速开始

你可以从下面几个由易到难的入门案例开始上手 UtilMeta 框架

  1. BMI 计算 API
  2. 用户注册登录查询 API
  3. Realworld 博客项目

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

  • 处理请求参数:如何处理路径参数,查询参数,请求体和请求头,以及如何处理文件上传
  • API 类与接口路由:如何使用 API 类挂载简洁地定义树状接口路由,以及利用钩子等特性方便地在接口间复用代码,处理错误,模板化响应
  • 数据查询与 ORM 操作:如何使用 Schema 声明式地编写 RESTful 接口所需要的增删改查和 ORM 操作
  • 接口与用户鉴权:如何使用 Session, JWT, OAuth 等方式为接口的请求鉴权,获取当前请求用户与简化登录操作
  • 配置运行与部署:如何使用声明式环境变量等特性配置服务的运行设置,启动与部署
  • 从现有项目迁移:如何从现有的后端项目中渐进式地接入 UtilMeta 接口或迁移到 UtilMeta

社区

如果你觉得这个项目不错,可以帮我们的 Github 仓库 点个 ~

你也可以加入我们社区获取项目的最新进展或参与讨论

或扫码添加 UtilMeta 框架作者的微信加入开发者微信群

UtilMeta - 简洁高效的 Python 后端元框架的更多相关文章

  1. python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...

  2. Python 常用Web框架的比较

    转载来自:https://www.cnblogs.com/sunshine-1/p/7372934.html 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OL ...

  3. python之Bottle框架

    一.简单的Bottle框架 1)bottle框架简介 安装 pip install bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架. 此框架只由一个 .py 文件,除 ...

  4. 7大python 深度学习框架的描述及优缺点绍

    Theano https://github.com/Theano/Theano 描述: Theano 是一个python库, 允许你定义, 优化并且有效地评估涉及到多维数组的数学表达式. 它与GPUs ...

  5. Python之Web框架们

    Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. pip i ...

  6. Python后端开发要求

    关于Python后端开发要求 一.对Python有兴趣,熟悉Python(标准库) 最好阅读过源码 了解Python的优化(熟悉pypy更佳) 二.至少至少一门语言(不说"精通") ...

  7. [原创]基于VueJs的前后端分离框架搭建之完全攻略

    首先请原谅本文标题取的有点大,但并非为了哗众取宠.本文取这个标题主要有3个原因,这也是写作本文的初衷: (1)目前国内几乎搜索不到全面讲解如何搭建前后端分离框架的文章,讲前后端分离框架思想的就更少了, ...

  8. 目前比较流行的Python量化开源框架汇总(交易+风险分析工具)

     注:点击框架名称通往Github talib talib的简称是Technical Analysis Library,主要功能是计算行情数据的技术分析指标 numpy 介绍:一个用python实现的 ...

  9. python各种web框架对比

    0 引言        python在web开发方面有着广泛的应用.鉴于各种各样的框架,对于开发者来说如何选择将成为一个问题.为此,我特此对比较常见的几种框架从性能.使用感受以及应用情况进行一个粗略的 ...

  10. python之Flask框架

    一.简单的Flask框架 1)flask简介 Flask 是一个 web 框架.也就是说 Flask 为你提供工具,库和技术来允许你构建一个 web 应用程序. 这个 wdb 应用程序可以使一些 we ...

随机推荐

  1. [转帖]jmeter线程组与循环次数的区别

    在压测的时候,有些接口需要携带登录信息,但是我们只想登录一次,然后其他接口进行多用户压测,此时你会怎么办?用仅一次控制器实现吗?下面我们来看看用仅一次控制器能不能实现 压测时jmeter中的线程数是模 ...

  2. [转帖]resin的安装与配置

    1.安装jdk 之前装过了,就不做演示了 vim /etc/profile   //注意java的配置文件 JAVA_HOME=/usr/local/jdk1.8/ JAVA_BIN=/usr/loc ...

  3. 【转帖】奇淫技巧 | route命令设置网络优先级

    奇淫技巧 | route命令设置网络优先级 https://blog.csdn.net/DynmicResource/article/details/120134745 1. 背景 在生活中的会经常遇 ...

  4. [转帖]jmeter压力测试

    使用jmeter 进行并发压力测试. 首先需要安装好jmeter,下面以widows操作平台为例: 1.确保电脑安装并配置好java环境:具体怎么下载和配置请自行百度: 2.登录jmeter官网htt ...

  5. MySQL控制权限

    编写顺序和执行顺序是不一样的 编写顺序: SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后条件列表 ORDER BY 排序字段列表 ...

  6. 【K哥爬虫普法】辛苦钱被中间商抽走八成,还因此锒铛入狱

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...

  7. 站点用css一键变灰色

    默哀站点变灰色效果看本站即可 css代码如下 <style>html{-webkit-filter:grayscale(100%);-moz-filter:grayscale(100%); ...

  8. OpenIM集群(非k8s)部署文档

    自行部署etcd/zookeeper/mysql/kafka/mongo/redis集群,可以根据此性能评估服务器需求. 以下是针对一台华为云主机s3的压测数据:8核16G内存,普通磁盘(非SSD)( ...

  9. 【五】强化学习之Sarsa、Qlearing详细讲解----PaddlePaddlle【PARL】框架{飞桨}

    相关文章: [一]飞桨paddle[GPU.CPU]安装以及环境配置+python入门教学 [二]-Parl基础命令 [三]-Notebook.&pdb.ipdb 调试 [四]-强化学习入门简 ...

  10. 通过Demo学WPF—数据绑定(二)

    准备 今天学习的Demo是Data Binding中的Linq: 创建一个空白解决方案,然后添加现有项目,选择Linq,解决方案如下所示: 查看这个Demo的效果: 开始学习这个Demo xaml部分 ...