转移
This commit is contained in:
94
routers/task.py
Normal file
94
routers/task.py
Normal file
@@ -0,0 +1,94 @@
|
||||
from fastapi import APIRouter, HTTPException, Request, WebSocket
|
||||
from fastapi.responses import HTMLResponse
|
||||
from fastapi.templating import Jinja2Templates
|
||||
from models.task import TaskForm, TaskManager
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
task_manager = TaskManager()
|
||||
|
||||
|
||||
# 创建新任务
|
||||
@router.post("", summary="创建新任务")
|
||||
def create_task(form: TaskForm):
|
||||
task = task_manager.add_task(name=form.name, user_id=123456, description=form.description)
|
||||
return task
|
||||
|
||||
|
||||
# 获取任务列表
|
||||
@router.get("", summary="获取任务列表", description="可使用user_id参数筛选指定用户的任务列表")
|
||||
def get_task_list(user_id: int=None):
|
||||
return task_manager.get_tasks(user_id)
|
||||
|
||||
|
||||
# websocket demo
|
||||
@router.get("/demo", response_class=HTMLResponse)
|
||||
async def websocket_demo(request: Request):
|
||||
task_list = task_manager.get_tasks()
|
||||
templates = Jinja2Templates(directory="templates")
|
||||
return templates.TemplateResponse("websocket.html", {"request": request, "task_list": task_list})
|
||||
|
||||
|
||||
# 监听指定任务的变化事件, 通知前端(不使用pydantic模型, 正确的写法)
|
||||
@router.websocket("/{task_id}", name="监听任务变化")
|
||||
async def websocket_endpoint(task_id: str, websocket: WebSocket):
|
||||
await websocket.accept()
|
||||
await task_manager.add_websocket(task_id, websocket)
|
||||
async for data in websocket.iter_text():
|
||||
await websocket.send_text(f"Message text was: {data}")
|
||||
task_manager.remove_websocket(task_id, websocket)
|
||||
print("websocket 连接已自动关闭")
|
||||
|
||||
#await websocket.send_json({"message": "Hello WebSocket!"})
|
||||
#task = task_manager.get_task(task_id)
|
||||
#print(task)
|
||||
#if not task:
|
||||
# print("task 不存在, 结束连接")
|
||||
# return await websocket.close() # 任务不存在, 结束连接
|
||||
#await websocket.send_json(task) # 将任务的状态发送给客户端
|
||||
#await task_manager.add_websocket(task_id, websocket)
|
||||
# 正确的写法, 使用 async for, 并且处理意外断开的情况
|
||||
#try:
|
||||
# async for data in websocket.iter_text():
|
||||
# if data == "close":
|
||||
# print("客户端主动关闭连接")
|
||||
# task_manager.remove_websocket(task_id, websocket)
|
||||
# await websocket.close()
|
||||
# break
|
||||
# else:
|
||||
# print(f"接收到客户端消息: {data}")
|
||||
# await websocket.send_text(f"Message text was: {data}")
|
||||
#except Exception as e:
|
||||
# print(f"客户端意外断开连接: {e}")
|
||||
# task_manager.remove_websocket(task_id, websocket)
|
||||
# #await websocket.close()
|
||||
|
||||
# 监听客户端的状态, 如果客户端主动关闭连接或意外断开连接, 都从任务的websocket列表中移除
|
||||
#while True:
|
||||
# try:
|
||||
# data = await websocket.receive_text()
|
||||
# if data == "close":
|
||||
# print("客户端主动关闭连接")
|
||||
# task_manager.remove_websocket(task_id, websocket)
|
||||
# await websocket.close()
|
||||
# break
|
||||
# else:
|
||||
# print(f"接收到客户端消息: {data}")
|
||||
# await websocket.send_text(f"Message text was: {data}")
|
||||
# except Exception as e:
|
||||
# print(f"客户端意外断开连接: {e}")
|
||||
# task_manager.remove_websocket(task_id, websocket)
|
||||
# #await websocket.close()
|
||||
# break
|
||||
|
||||
|
||||
# 获取任务详情
|
||||
@router.get("/{task_id}", summary="获取任务详情")
|
||||
def get_task(task_id: int):
|
||||
return get_task(task_id)
|
||||
|
||||
|
||||
# 删除任务
|
||||
@router.delete("/{task_id}", summary="删除指定任务")
|
||||
def delete_task(task_id: int):
|
||||
return delete_task(task_id)
|
Reference in New Issue
Block a user