Libra 是一个极简的 Python Web 框架,仿照 Flask 开发,用于构建轻量级的 RESTful API 应用。
- WSGI 兼容:可配合 Gunicorn、uWSGI 等 WSGI 服务器运行
- 路由系统:装饰器方式定义路由,支持 URL 参数
- 请求/响应对象:便捷获取请求数据,构建响应
- 模板渲染:支持简单的模板语法
- 异常处理:内置常见的 HTTP 异常类
pip install -e .# app.pyfromlibraimportLibraapp=Libra()
@app.route('/hello')defhello():
return'Hello, World!'@app.route('/user/<id>')defget_user(id):
return {'id': id, 'name': f'User {id}'}
if__name__=='__main__':
app.run()运行:
python app.py访问 http://127.0.0.1:5000/hello
@app.route('/path')defview_function():
return'Response'@app.get('/items') # GET 请求defget_items():
returnitems@app.post('/items') # POST 请求defcreate_item():
return'Created', 201@app.put('/items/<id>') # PUT 请求defupdate_item(id):
returnf'Updated {id}'@app.delete('/items/<id>') # DELETE 请求defdelete_item(id):
returnf'Deleted {id}'# 字符串参数(默认)@app.route('/user/<name>')defget_user(name):
returnf'User: {name}'# 整数参数@app.route('/post/<id:int>')defget_post(id):
returnf'Post ID: {id}'# 路径参数(包含斜杠)@app.route('/files/<path:filepath>')defget_file(filepath):
returnf'File: {filepath}'fromlibraimportLibra, Requestapp=Libra()
@app.route('/request-demo')defhandle_request(request: Request):
# 获取请求方法method=request.method# 获取 URL 参数args=request.args# 返回字典# 获取 JSON 数据json_data=request.json# 返回字典或 None# 获取表单数据form_data=request.form# 返回字典# 获取请求头headers=request.headers# 获取客户端 IPip=request.remote_addrreturn {
'method': method,
'args': args,
}fromlibraimportLibra, Responseapp=Libra()
# 直接返回字符串@app.route('/hello')defhello():
return'Hello!'# 返回字典(自动转为 JSON)@app.route('/json')defjson_resp():
return {'message': 'ok', 'count': 10}
# 使用 Response 对象@app.route('/custom')defcustom_response():
response=Response('Custom response')
response.set_header('X-Custom', 'value')
returnresponse# 使用 Response 工厂方法@app.route('/jsonify')defjson_response():
returnResponse.jsonify({'data': [1, 2, 3]})
# 重定向@app.route('/old')defold_url():
returnResponse.redirect('/new', status=301)fromlibraimportLibra, render_templateapp=Libra()
@app.route('/template')defshow_template():
returnrender_template('Hello {{ name }}!', name='World')
# 循环示例@app.route('/list')defshow_list():
items= ['Apple', 'Banana', 'Orange']
returnrender_template(
'{% for item in items %}{{ item }}{% endfor %}',
items=items
)fromlibraimportLibraapp=Libra()
# 请求前执行@app.before_requestdefcheck_auth():
# 返回非 None 值会终止请求return'Unauthorized'# 请求后执行@app.after_requestdefadd_header(response):
response.set_header('X-Powered-By', 'Libra')
returnresponseif__name__=='__main__':
app.run(host='0.0.0.0', port=5000, debug=True)gunicorn -w 4 -b 0.0.0.0:5000 app:appfromlibraimportLibra, NotFoundError, BadRequestErrorapp=Libra()
@app.route('/user/<id>')defget_user(id):
ifnotid.isdigit():
raiseBadRequestError('Invalid ID')
# ... 业务逻辑myapp/
├── app.py # 主应用
├── requirements.txt # 依赖
└── views/ # 视图函数(可选)
└── api.py
- Python 3.8+
MIT License