Metadata-Version: 2.1
Name: bframe
Version: 0.0.10
Summary: A simple python web server frame
Home-page: https://github.com/Bean-jun/bframe
Author: Bean-jun
Author-email: 1342104001@qq.com
License: MIT License
Platform: UNKNOWN
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Description-Content-Type: text/markdown
License-File: LICENSE

# A simple python web server frame

> `wranning`: same flask, not flask!


# 1. 快速安装使用

```shell
pip install bframe -i https://pypi.org/simple
```

or 

```shell
git clone https://github.com/Bean-jun/bframe.git
python setup.py install
```

# 2. 样例demo

-> main.py


# 3. web server 自定义协议

```python
from bframe import request, Redirect
from bframe import Frame


app = Frame(__name__)


@app.get("/favicon.ico")
def index():
    with open("favicon.ico", "rb") as f:
        data = f.read()
    return data


@app.get("/main")
@app.get("/home")
def home():
    url = request.Args.get("url")
    if url:
        return Redirect(url)
    return request.Headers


if __name__ == "__main__":
    app.run(address="0.0.0.0")
```

# 4. wsgi支持

若您需要使用wsgi功能的支持，使用`WSGIProxy`类进行包装即可

```python
from bframe import request, Redirect
from bframe import Frame


app = Frame(__name__)


@app.get("/favicon.ico")
def index():
    with open("favicon.ico", "rb") as f:
        data = f.read()
    return data


@app.get("/main")
@app.get("/home")
def home():
    url = request.Args.get("url")
    if url:
        return Redirect(url)
    return request.Headers


if __name__ == "__main__":
    from bframe import WSGIProxy
    from wsgiref.simple_server import make_server

    with make_server('', 7256, WSGIProxy(app)) as httpd:
        print("Serving on port 7256...")
        httpd.serve_forever()
```


# 4. 添加钩子支持


定义请求钩子 

```python
# 定义请求钩子
@app.add_before_handle
def before_02():
    if request.Method == "POST":
        return "disallow method"
```

定义响应钩子 

```python
# 定义响应钩子
@app.add_after_handle
def after_xx(resp: Response):
    print("resp:", resp.Code)
    return resp
```

自定义错误响应 

```python
# 自定义错误响应
@app.add_error_handle(401)
def err_401():
    return "401 error"
```


# 5. 支持重定向

# 6. 支持g变量

# 7. 解析请求体

# 8. 支持路径参数匹配(字符串、数字、正则)

# 9. 支持静态文件

