# gua
**Repository Path**: GodanKing/gua
## Basic Information
- **Project Name**: gua
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-10-09
- **Last Updated**: 2025-12-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Gua - Python Web框架
## 为什么选择Gua?
- **10行代码创建完整应用** - 不需要学习复杂的框架概念,直接上手写业务代码
- **自动处理所有响应类型** - 返回什么就是什么,不用手动设置JSON、HTML或文本格式
- **内置实时通信功能** - WebSocket和SSE一行代码实现,无需额外配置
- **零内存占用处理大文件** - 上传GB级文件不占用服务器内存
- **AI应用原生支持** - 逐字流式响应,像ChatGPT一样自然
- **极简CLI工具** - 一键启动应用,自动处理所有配置
## 30秒创建第一个应用
```python
# app.py
from gua import GuaApp, respond
app = GuaApp()
@app.route("/")
async def home():
return respond("
Hello World
")
@app.route("/api/users/{user_id}")
async def get_user(user_id: int):
return respond({"user_id": user_id, "name": f"User {user_id}"})
```
```bash
# 安装
pip install https://gitee.com/GodanKing/gua.git
# 启动 - 使用Gua CLI工具(推荐)
gua app:app
# 或者使用传统方式
granian app:app --interface asgi
```
访问 http://localhost:8000 查看效果!
## 安装
### 方式1:使用pip安装(推荐)
```bash
# 基础安装
pip install https://gitee.com/GodanKing/gua.git
# 推荐使用uv(更快的包管理器)
uv add git+https://gitee.com/GodanKing/gua.git
# 安装性能优化版本(包含orjson)
pip install https://gitee.com/GodanKing/gua.git[performance]
```
### 方式2:开发环境安装
```bash
# 克隆仓库
git clone https://gitee.com/GodanKing/gua.git
cd gua
# 安装开发依赖
uv sync
# 或者使用pip
pip install -e ".[dev]"
```
## Gua CLI工具
Gua框架提供了极简的CLI工具,将复杂的granian参数简化为5个核心参数:
### 基础使用
```bash
# 启动应用(自动检测)
gua app:app
# 指定端口
gua app:app --port 3000
# 生产环境
gua app:app --mode prod
# 带静态文件
gua app:app --static ./static --static-route /assets
```
### 运行模式
| 模式 | 说明 | 默认配置 |
|------|------|----------|
| `dev` | 开发环境 | 单进程,热重载 |
| `prod` | 生产环境 | 多进程,无重载 |
| `example` | 示例应用 | 单进程,热重载 |
### 快速启动示例
```bash
# 启动任何示例应用
gua examples.simple_app:app
gua examples.websocket_app:app
gua examples.ai_streaming:app
# 等价于
granian examples.simple_app:app --interface asgi --reload
granian examples.websocket_app:app --interface asgi --reload
granian examples.ai_streaming:app --interface asgi --reload
```
### 完整参数说明
```bash
gua [app] [options]
参数:
app 应用标识符(如:app:app),默认自动检测
--port, -p 端口号(默认:8000)
--host 主机地址(默认:0.0.0.0)
--mode, -m 运行模式:dev/prod/example(默认:dev)
--workers, -w 工作进程数(默认:模式自动设置)
--static 静态文件目录路径
--static-route 静态文件路由前缀(默认:/static)
--dry-run 显示命令而不执行
--version 显示版本信息
-- 透传granian参数
```
## 实际应用场景
### 场景1:快速构建网站和API
**用途**:快速搭建个人网站、博客、API服务,无需学习复杂的框架概念。
**示例:个人博客**
```python
from gua import GuaApp, respond
app = GuaApp()
@app.route("/")
async def home():
return respond("我的博客
欢迎访问我的个人博客
")
@app.route("/api/posts")
async def list_posts():
return respond([
{"id": 1, "title": "第一篇文章", "content": "..."},
{"id": 2, "title": "第二篇文章", "content": "..."}
])
@app.route("/api/posts/{post_id}")
async def get_post(post_id: int):
return respond({"id": post_id, "title": f"文章{post_id}", "content": "文章内容..."})
```
**示例:REST API服务**
```python
from gua import GuaApp, respond, error
app = GuaApp()
@app.route("/api/users", ["GET", "POST"])
async def users():
if request.method == "GET":
return respond({"users": []})
else:
return respond({"message": "用户创建成功"}, status=201)
@app.route("/api/users/{user_id}")
async def get_user(user_id: int):
if user_id > 1000:
return error("用户不存在", 404)
return respond({"id": user_id, "name": f"用户{user_id}"})
```
### 场景2:实现实时通信
**用途**:构建聊天室、实时通知、在线协作功能,让多个用户同时交互。
**示例:聊天室**
```python
from gua import GuaApp, respond, create_websocket_manager, ws_text
app = GuaApp()
ws_manager = create_websocket_manager()
@app.websocket("/ws")
async def chat_websocket(scope: Scope, receive: Receive, send: Send):
await ws_text(send, "accept")
ws_manager.add(send)
try:
while True:
message = await receive()
if message["type"] == "websocket.receive":
# 广播消息给所有连接的用户
await ws_manager.broadcast({
"type": "message",
"data": message["text"],
"time": time.time()
})
finally:
ws_manager.remove(send)
@app.route("/")
async def chat_page():
return respond("""
聊天室
""")
```
**示例:实时状态更新**
```python
from gua import GuaApp, respond, create_sse_manager
app = GuaApp()
sse_manager = create_sse_manager()
@app.route("/events")
async def status_updates():
"""实时推送服务器状态"""
async def status_generator():
while True:
await sse_manager.broadcast({
"event": "status",
"data": {
"cpu": random.randint(10, 90),
"memory": random.randint(20, 80),
"time": time.time()
}
})
await asyncio.sleep(2)
# 启动后台任务
asyncio.create_task(status_generator())
# 返回SSE连接
from gua import sse
return sse().start({"message": "连接成功"}).build()
@app.route("/")
async def dashboard():
return respond("""
服务器状态监控
等待数据...
""")
```
### 场景3:处理流式数据
**用途**:处理大文件传输、实时数据展示,避免内存溢出和长时间等待。
**示例:文件上传**
```python
from gua import GuaApp, respond, file_handler
app = GuaApp()
@app.route("/upload", ["POST"])
async def upload_file(request):
"""处理大文件上传,零内存占用"""
file_info = await file_handler.save_stream(request)
return respond({
"message": "文件上传成功",
"filename": file_info["filename"],
"size": file_info["size"]
})
@app.route("/download/{filename}")
async def download_file(filename):
"""文件下载"""
return file_handler.send_file(f"./uploads/{filename}")
```
**示例:实时数据流**
```python
from gua import GuaApp, stream
app = GuaApp()
@app.route("/live-data")
async def live_data():
"""实时推送数据,适合数据可视化"""
return (
stream()
.range(1, 100, 0.1) # 每0.1秒发送一个数字
.build()
)
@app.route("/progress")
async def progress_tracker():
"""模拟长时间任务的进度更新"""
return (
stream()
.json({"status": "开始处理", "progress": 0}, 1)
.json({"status": "处理中", "progress": 25}, 2)
.json({"status": "处理中", "progress": 50}, 2)
.json({"status": "处理中", "progress": 75}, 2)
.json({"status": "完成", "progress": 100}, 1)
.build()
)
```
### 场景4:构建AI应用
**用途**:实现类似ChatGPT的流式对话、AI助手,提供流畅的用户体验。
**示例:AI聊天机器人**
```python
from gua import GuaApp, respond, stream
app = GuaApp()
@app.route("/chat")
async def chat_stream(request):
"""AI流式对话,逐字显示回复"""
# 获取用户消息
user_message = request.query_params.get("message", "")
# 模拟AI思考
await asyncio.sleep(1)
# 生成AI回复
ai_response = f"您说:'{user_message}'。这是一个很好的问题,让我来详细解答..."
# 逐字流式返回
return (
stream()
.text(ai_response, 0.05) # 每0.05秒显示一个字符
.build()
)
@app.route("/")
async def chat_interface():
return respond("""
AI助手
""")
```
### 场景5:文件处理
**用途**:构建文件分享系统、批量处理工具,支持各种文件操作。
**示例:文件分享系统**
```python
from gua import GuaApp, respond, file_handler
app = GuaApp()
@app.route("/")
async def file_list():
"""显示文件列表"""
import os
files = os.listdir("./uploads")
file_links = [f'{f}' for f in files]
return respond(f"""
文件分享
文件列表
{"".join(file_links)}
""")
@app.route("/upload", ["POST"])
async def upload_file(request):
"""处理文件上传"""
file_info = await file_handler.save_stream(request)
return respond({"message": "上传成功", "filename": file_info["filename"]})
@app.route("/download/{filename}")
async def download_file(filename):
"""文件下载"""
return file_handler.send_file(f"./uploads/{filename}")
```
## 日志系统
Gua框架内置了基于Linus设计哲学的极简日志系统:
### 基础日志使用
```python
from gua import GuaApp, respond, get_default_logger
app = GuaApp()
logger = get_default_logger()
@app.route("/api/data")
async def get_data():
logger.log("info", "data_request", "获取数据请求", user_id=123)
return respond({"data": "敏感数据"})
```
### 高级日志配置
```python
from gua import GuaApp, GuaLogger, LoggingMiddleware
# 创建自定义日志器
logger = GuaLogger("my_app", output="file", file_path="app.log")
# 应用日志中间件
app = GuaApp()
app.use(LoggingMiddleware(logger, slow_threshold=1.0))
```
### 性能监控
```python
from gua import SimpleMonitor, get_default_logger
logger = get_default_logger()
monitor = SimpleMonitor(logger)
# 记录请求性能
monitor.record_request(duration=0.5, is_error=False)
# 获取统计信息
stats = monitor.get_stats()
# 返回: {"avg_response_time": 0.45, "max_response_time": 1.2, "error_rate": 0.05}
```
## 常见问题
### 如何添加认证?
```python
from gua import GuaApp, respond, auth
app = GuaApp()
# 默认保护所有路径,只列出公开路径
app.use(auth(public_paths=["/login", "/register", "/health"]))
@app.route("/admin")
async def admin_panel():
return respond({"message": "管理员面板"})
@app.route("/login")
async def login():
return respond({"message": "登录页面"}) # 公开访问,无需认证
@app.route("/api/users")
async def users():
return respond({"users": ["alice", "bob"]}) # 需要认证
```
### 如何处理错误?
```python
from gua import GuaApp, respond, error
app = GuaApp()
@app.route("/api/data")
async def get_data():
if not user_authenticated():
return error("未授权访问", 401)
return respond({"data": "敏感数据"})
```
### 如何部署到生产环境?
```bash
# 使用Gua CLI部署(推荐)
gua app:app --mode prod --workers 4
# 使用传统方式
granian app:app --interface asgi --workers 4
# 使用Docker
docker build -t my-gua-app .
docker run -p 8000:8000 my-gua-app
# 使用环境变量配置
export GUA_HOST=0.0.0.0
export GUA_PORT=8000
export GUA_WORKERS=4
gua app:app --mode prod
```
### 如何配置静态文件?
```bash
# 开发环境
gua app:app --static ./static --static-route /assets
# 生产环境
gua app:app --mode prod --static /var/www/static --static-route /files
```
## 更多示例
查看 `examples/` 目录中的完整示例:
- `simple_app.py` - 基础Web应用
- `websocket_app.py` - WebSocket聊天室
- `ai_streaming.py` - AI流式对话
- `streaming_api.py` - 流式数据API
- `file_streaming.py` - 文件流处理
- `auth_demo.py` - 认证中间件演示
- `logging_demo.py` - 日志系统演示
## 更多文档
### 核心指南
- [极简API指南](docs/极简API指南.md) - 掌握Gua框架的核心API设计
- [认证中间件指南](docs/认证中间件指南.md) - 了解"默认保护,明确例外"的认证设计
- [JSON配置指南](docs/JSON配置指南.md) - 配置JSON处理和性能优化
- [Gua CLI设计文档](docs/gua-cli设计文档.md) - 深入了解CLI工具设计
### 流式处理系列
- [流式处理快速开始](docs/流式处理/流式处理快速开始.md) - 快速上手流式功能
- [流式处理框架设计](docs/流式处理/流式处理框架设计.md) - 深入了解流式架构设计
- [流式处理最佳实践](docs/流式处理/流式处理最佳实践.md) - 生产环境流式处理建议
- [Gua框架流式处理实现](docs/流式处理/Gua框架流式处理实现.md) - 流式功能实现细节