我用极少的代码了实现一款 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
1
TJT 2017-03-07 18:39:32 +08:00
|
2
mgna17 2017-03-07 19:01:29 +08:00 via Android
那个。。。 method not allowed 不是 405 么😓
|
3
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 |
4
cevincheung 2017-03-07 20:02:21 +08:00
坐等日志、队列、 ORM(Postgresql&MySQL)。
讲真 Auth 就不要了 |
8
prasanta OP @cevincheung orm 我会重新启动一个项目,思路是分离出 django orm ,删减不常用的功能。我不打算把 orm 耦合进来,但是针对 xweb 定制一款符合现状的 orm 系统还是必要的。队列与日志同理,采用无耦合的形式开发。
|
9
bonfy 2017-03-07 21:41:06 +08:00 1
想法不错
不过要说代码少的话,其实有个框架叫 bottle 的,记得代码很少,不知道还有人在用么 |
10
prasanta OP @bonfy 我的灵感来自 bottle , flask 和 sanic 三款框架,其中 bottle 和 flask 中为了 python2.7 添加太多代码,而 sanic 并非基于 wsgi ,有太多的依赖。这是我的初衷
|
11
yangxin0 2017-03-07 21:54:03 +08:00 via iPhone 1
这种库居然也能说成框架
|
16
prasanta OP @yangxin0 orm 在我的计划之中,但是我不打算将它们耦合起来就像现在 Django ,我要的效果是 xweb 能快速地使用 peewee , sqlalchemy 等 orm ,也能用针对它开发的 orm 。同时这个 orm 应当能够和 flask , sanic 等结合使用。而不是强耦合地植入。
|
17
PythonAnswer 2017-03-07 23:12:37 +08:00
模板语言也不搞了吧。
json 部分弄好一点,实用性提高不少。 |
18
prasanta OP @PythonAnswer 你的想法和我一样, xweb 简化满足用于接口开发即可
|
19
madfishy 2017-03-07 23:45:56 +08:00
其实我只想要一个类似 php 那种一键部署的傻瓜工具
|
21
Kilerd 2017-03-08 00:06:05 +08:00
@aljun 我在写的 web 框架也是这样搭建测试 HTTP 的,(基本所有 python web 框架都是使用 wsgiref 的 make_server 来本地测试的)
他这种写法并没有问题。 是要是对象里面有 __call__ 函数 满足 wsgi 就可以了。 |
22
wellsc 2017-03-08 00:16:32 +08:00
闲着没事的话可以给 bottle 增加 asyncIo 支持,就像 sanic 对 Flask 做的一样。
|
24
huanglongtiankon 2017-03-08 09:22:52 +08:00
简单易懂,学习下,看看有没有机会做点贡献
|
25
wuxqing 2017-03-08 09:44:17 +08:00
建议去完善 sanic ,而不是再造一个轮子
|
26
prasanta OP @wuxqing sanic 使用 uvloop ,造成了无法使用像 flask 中的全局变量 request,response,g 等,并且它依赖于 aiofiles , httptools , ujson , uvloop 这几个库,如果这几个库更新,那么 sanic 不得不被牵着鼻子走. 我想实现的是无第三方依赖,并且摒弃 python2 .
|
27
wellsc 2017-03-08 09:53:42 +08:00
@prasanta bottle 本来就是兼容 Python2 和 3 的,但是 bottle 现在不支持 asyncio 。
|