xweb: 一款无依赖的 Python web 框架(低于 500 行代码)

2017-03-07 18:13:58 +08:00
 prasanta

我用极少的代码了实现一款 web 框架,目标是用低于 1000 行的代码实现 flask 的核心功能, xweb 框架基于 python3.5 以上开发,实在是居家旅行良品.

github 地址:https://github.com/gaojiuli/xweb

我的目标是用最少的代码实现符合现状的 web 框架,欢迎同样有兴趣的同学一起参与进来

说明

基于3.5开发

安装

pip install xweb

基本用法

from xweb.application import XWeb

app = XWeb()


@app.route('/:name/')
def call_my_name(name):
    return 'hi {}!'.format(name)


app.listen(3000)

请求与相应

from xweb.globals import request

request.path
request.query_string
request.query
request.files
request.forms
request.json
request.ip
request.hostname
request.headers



from xweb.globals import response

response.headers
response.status
response.body

中间件

from xweb.application import XWeb

app = XWeb()

@app.middleware('request')
def print_on_request1():
    print("I print when a request is received by the server1")


@app.middleware('request')
def print_on_request2():
    print("I print when a request is received by the server2")


@app.middleware('response')
def print_on_response1():
    print("I print when a response is returned by the server1")


@app.middleware('response')
def print_on_response2():
    print("I print when a response is returned by the server2")

@app.route('/:name/')
def call_my_name(name):
    return 'hi {}!'.format(name)


app.listen(3000)

我的目标是用最少的代码实现符合现状的 web 框架,欢迎同样有兴趣的同学一起参与进来

github 地址:https://github.com/gaojiuli/xweb

5076 次点击
所在节点    Python
28 条回复
TJT
2017-03-07 18:39:32 +08:00
mgna17
2017-03-07 19:01:29 +08:00
那个。。。 method not allowed 不是 405 么😓
aljun
2017-03-07 19:56:27 +08:00
def listen(self, port):
from wsgiref.simple_server import make_server
server = make_server('127.0.0.1', port, self)
print('serve on 127.0.0.1:{port}'.format(port=port))
server.serve_forever()
....建议把这个裁了。。。换成可以使用任意 wsgi
cevincheung
2017-03-07 20:02:21 +08:00
坐等日志、队列、 ORM(Postgresql&MySQL)。

讲真 Auth 就不要了
prasanta
2017-03-07 21:33:39 +08:00
@mgna17 状态码从网上搞得,还没有专门整理
prasanta
2017-03-07 21:34:24 +08:00
@TJT 雪亮的眼!
prasanta
2017-03-07 21:35:50 +08:00
@aljun 这个是开发阶段选用的,只要符合 wsgi 就可以,实际部署的时候应选用 uwsgi 等工具
prasanta
2017-03-07 21:38:26 +08:00
@cevincheung orm 我会重新启动一个项目,思路是分离出 django orm ,删减不常用的功能。我不打算把 orm 耦合进来,但是针对 xweb 定制一款符合现状的 orm 系统还是必要的。队列与日志同理,采用无耦合的形式开发。
bonfy
2017-03-07 21:41:06 +08:00
想法不错

不过要说代码少的话,其实有个框架叫 bottle 的,记得代码很少,不知道还有人在用么
prasanta
2017-03-07 21:43:27 +08:00
@bonfy 我的灵感来自 bottle , flask 和 sanic 三款框架,其中 bottle 和 flask 中为了 python2.7 添加太多代码,而 sanic 并非基于 wsgi ,有太多的依赖。这是我的初衷
yangxin0
2017-03-07 21:54:03 +08:00
这种库居然也能说成框架
menc
2017-03-07 22:03:32 +08:00
@yangxin0 可以啊, web.py 还是框架呢
yangxin0
2017-03-07 22:15:11 +08:00
@menc 哦。你这个也就是一个 action dispatcher ,一个框架重点在于 ORM
rust
2017-03-07 22:21:35 +08:00
@yangxin0 如你所说的话,Flask 和 Sanic 也不算框架咯?
zhanghedr
2017-03-07 22:48:40 +08:00
@yangxin0 很多框架都不自带 ORM ,怎么成重点了
prasanta
2017-03-07 23:11:03 +08:00
@yangxin0 orm 在我的计划之中,但是我不打算将它们耦合起来就像现在 Django ,我要的效果是 xweb 能快速地使用 peewee , sqlalchemy 等 orm ,也能用针对它开发的 orm 。同时这个 orm 应当能够和 flask , sanic 等结合使用。而不是强耦合地植入。
PythonAnswer
2017-03-07 23:12:37 +08:00
模板语言也不搞了吧。

json 部分弄好一点,实用性提高不少。
prasanta
2017-03-07 23:19:56 +08:00
@PythonAnswer 你的想法和我一样, xweb 简化满足用于接口开发即可
madfishy
2017-03-07 23:45:56 +08:00
其实我只想要一个类似 php 那种一键部署的傻瓜工具
prasanta
2017-03-07 23:54:07 +08:00
@madfishy 感谢你的建议, python 可以很容易实现傻瓜地部署,我会在项目完整后编写这样的脚本。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/345653

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX