Python后端框架xweb: 如何实现简洁、禅意的开发体验
简介

众所周知, 如今的后端开发主要是负责接口的开发, 而前后端分离又是当下最流行的. 如果使用 python 技术栈, 通常情况下我们会选择 flask 全套,django,或者 tornado. 他们的模板引擎, session 功能在当下的后端开发中是基本不用的. 同时由于它们开始的时候是基于 python2 写的, 造成了现在代码中充斥着大量丑陋的兼容性代码. 再次, 它们依赖的许多第三方库也包含了许多为 python2 写的代码, 这样造成了恶性循环, 学习它们的源码必须要学习 python2 中一些被淘汰的东西, 而我们可能只是想看看其中某些功能的逻辑而已. 因此, 我用极少的代码实现了一个极简的 web 框架 xweb.(项目地址:https://github.com/gaojiuli/xweb)
理由
xweb 摒弃了一切为了 python2 而写的代码, 因此代码量特别少, 看过 xweb 源码的人都知道, 它的逻辑非常清晰, 代码也是很容易理解的.
xweb 不包含任何第三方库, 这让大家的学习成本进一步降低. 因为吸收了 flask, bottle, sanic 等框架中的一些优点, 我精简了 xweb 的 api, 使得上手轻松, 学习成本极低.
xweb 是基于 wsgi 写的, 因此所有适合 flask 的部署方法, xweb 也都支持.
使用 xweb 写出的接口代码, 别人很容易理解, 别人也能很容易参与进开发.
怎么用
v2ex 帖子: xweb: 一款无依赖的 Python web 框架(低于 500 行代码)
(项目地址:https://github.com/gaojiuli/xweb)
xweb 的 README 就是全部文档了, 短短一页就表述清楚了所有 api.
目的
让 web 开发的学习成本降到最低, 不管是开发也好, 源码学习也好, xweb 都是非常推荐使用的.
xweb(web 框架) + xorm(ORM 库,未写) + xparser(数据验证库,未写).构成一个完整体系, 它们共同特点是源码简洁, api 精简, 摒弃 python2. 这个体系会使得后端接口开发更加容易, 接口代码也更加优雅. 如果有朋友对我的想法有兴趣, 可以一起参与进来.
The Zen
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Python后端框架xweb: 如何实现简洁、禅意的开发体验
支持一下
对于xweb框架,要实现简洁、禅意的开发体验,核心在于充分利用其轻量级特性和约定优于配置的设计理念。下面是一个完整的示例展示如何用最少的代码构建一个功能完整的REST API:
from xweb import App, get, post, put, delete
app = App()
# 简单的内存存储
books = [
{"id": 1, "title": "Python禅", "author": "Tim Peters"},
{"id": 2, "title": "流畅的Python", "author": "Luciano Ramalho"}
]
# GET /books - 获取所有书籍
@get('/books')
async def list_books():
return books
# GET /books/{id} - 获取单本书籍
@get('/books/{id}')
async def get_book(id: int):
book = next((b for b in books if b['id'] == id), None)
return book if book else {"error": "Book not found"}
# POST /books - 创建新书籍
@post('/books')
async def create_book(data: dict):
new_id = max(b['id'] for b in books) + 1 if books else 1
book = {"id": new_id, **data}
books.append(book)
return book
# PUT /books/{id} - 更新书籍
@put('/books/{id}')
async def update_book(id: int, data: dict):
for book in books:
if book['id'] == id:
book.update(data)
return book
return {"error": "Book not found"}
# DELETE /books/{id} - 删除书籍
@delete('/books/{id}')
async def delete_book(id: int):
global books
books = [b for b in books if b['id'] != id]
return {"message": "Book deleted"}
if __name__ == '__main__':
app.run(port=8000)
这个示例展示了xweb的几个关键特性:
- 装饰器路由:
@get、@post等装饰器让路由定义直观清晰 - 自动参数解析:路径参数和请求体数据自动转换为Python类型
- 简洁的响应:直接返回字典或列表,自动转换为JSON响应
- 零配置启动:一行代码即可启动服务器
xweb的禅意体现在:没有复杂的配置,没有繁琐的中间件设置,专注于业务逻辑本身。框架处理了HTTP细节,让你能像写普通Python函数一样编写API端点。
要获得更简洁的体验,可以进一步:
- 使用类型提示让代码更清晰
- 利用Python 3.10+的match语句处理路由逻辑
- 保持每个端点函数职责单一
总结:用xweb写API就像写Python函数一样自然。
多谢
支持!
已 unstart
😀
一直用 bottle 干这样的事情,你得超越它啊。
谢谢你的支持。
我觉得更像一个原型产品。 毫无新意。
+1
已支持
作为一个业余 python ,随便说说。
web.py bottle django flask 一路用来,有 7 年了,都是写工作无关的 app ,非生产,现在只用 django 和 flask 。
django 就不说了,概括就是一应俱全。
flask 对比 web.py 和 bottle 的优势很大来自于无数方便的第三方扩展,我想用 orm 只需要 pip 个 flask-sqlalchemy ,想用管理后台只要 pip 个 flask-admin 。
扩展性好,扩展资源丰富,尽可不需要自己造轮子,这才是 flask 成功的原因吧。
一个太简洁的框架,也意味着使用过程中需要自己造太多的轮子,这感觉很不 python ,用业余的角度,感觉很难成功…
我这样是为了低耦合, 后续我会实现 orm 与 validator 功能.
由于它们之间是互相独立的, 因此可以随意用到其他地方.
分开开发不同库的好处你应该可以理解吧 ?
以后使用 xweb + xorm +xdata 能够快速实现开发.
而单独的 xweb 只负责 request 的接收,以及 response 的返回.

