当前位置: 首页 > wzjs >正文

如何制作企业网站网站制作公司价格

如何制作企业网站,网站制作公司价格,运营哪里学的比较专业,logo标志设计网一、需求场景与技术栈价值 核心需求 前端通过表单提交系统命令(如 ls -l、docker ps)后端安全执行命令并实时返回日志流前端动态渲染日志,支持自动滚动与状态监控 技术栈优势 Ant Design:提供健壮的 Table、List 组件展示日志&am…

一、需求场景与技术栈价值

  1. 核心需求

    • 前端通过表单提交系统命令(如 ls -ldocker ps
    • 后端安全执行命令并实时返回日志流
    • 前端动态渲染日志,支持自动滚动与状态监控
  2. 技术栈优势

    • Ant Design:提供健壮的 TableList 组件展示日志,Modal 实现交互式命令窗口
    • FastAPI:异步处理命令执行(asyncio.subprocess),支持 WebSocket 实时推送日志流
    • 安全性:命令白名单校验 + 用户权限隔离(参考企业级设计)

二、前后端实现详解

前端(Ant Design)关键代码
import { Button, List, Input, Modal } from 'antd';
import { useWebSocket } from 'react-use-websocket';const CommandExecutor = () => {const [logs, setLogs] = useState([]);const [command, setCommand] = useState('');// WebSocket 连接:实时接收日志const { sendMessage, lastMessage } = useWebSocket('ws://localhost:8000/ws/log', {onMessage: (e) => {setLogs(prev => [...prev, { id: Date.now(), text: e.data }]);}});// 提交命令到后端const executeCommand = () => {if (command.trim()) {sendMessage(JSON.stringify({ cmd: command }));setCommand('');}};return (<><Input.Search placeholder="输入系统命令(例:ls -l)" enterButton="执行" value={command}onChange={(e) => setCommand(e.target.value)}onSearch={executeCommand}/><ListdataSource={logs}renderItem={log => <List.Item>{log.text}</List.Item>}style={{ maxHeight: '400px', overflowY: 'auto' }}/></>);
};
后端(FastAPI)关键代码
from fastapi import FastAPI, WebSocket
import asyncioapp = FastAPI()# 命令白名单(防止非法操作)
ALLOWED_COMMANDS = ["ls", "docker ps", "git status"]@app.websocket("/ws/log")
async def websocket_exec(websocket: WebSocket):await websocket.accept()while True:data = await websocket.receive_json()cmd = data.get("cmd")# 校验命令安全性if not any(cmd.startswith(allowed) for allowed in ALLOWED_COMMANDS):await websocket.send_text("错误:禁止执行的命令")continue# 异步执行命令并实时返回输出process = await asyncio.create_subprocess_shell(cmd,stdout=asyncio.subprocess.PIPE,stderr=asyncio.subprocess.PIPE)# 流式读取日志while not process.stdout.at_eof:line = await process.stdout.readline()await websocket.send_text(f"STDOUT: {line.decode().strip()}")# 错误流处理err = await process.stderr.read()if err:await websocket.send_text(f"STDERR: {err.decode()}")

三、安全与性能优化

  1. 命令安全层

    • 白名单机制:仅允许预定义命令(如 ALLOWED_COMMANDS
    • 参数过滤:使用 shlex.split() 避免命令注入攻击
    • 权限控制:JWT 鉴权绑定用户与可执行命令范围
  2. 性能提升方向

    • 日志分块传输:大日志拆分为多消息包,避免 WebSocket 阻塞
    • 前端虚拟滚动:Ant Design 的 List 开启 virtual 属性支持万级日志渲染
    • 后端异步队列:Celery 后台执行长耗时命令,通过 WebSocket 推送进度

四、扩展功能实践

场景:文件上传后自动解压并日志监控
# FastAPI 文件上传接口(结合命令执行)
@app.post("/upload-and-extract")
async def upload_file(file: UploadFile):save_path = f"./uploads/{file.filename}"with open(save_path, "wb") as f:f.write(await file.read())# 执行解压命令并记录日志proc = await asyncio.create_subprocess_shell(f"tar -xzvf {save_path}",stdout=asyncio.subprocess.PIPE)return {"status": "success", "task_id": proc.pid}

前端通过 轮询接口WebSocket 获取解压日志流,使用 Ant Design 的 Progress 组件展示进度。

http://www.dtcms.com/wzjs/821322.html

相关文章:

  • seo企业网站模板商丘企业网站建设团队
  • 手机net网站开发网站图片360度旋转怎么做的
  • 想学学做网站刘涛给孩子网站做的广告
  • 算命网站开发最新搜索关键词
  • 优惠券网站建设mit网站可以做app
  • 网站建设的主要功能有哪些昆明企业网站建设公司
  • 做域名跳转非法网站负什么责任微信小程序怎么注册申请
  • 谷歌网站开发客户wordpress怎样连接数据库连接
  • 家庭厨房做外卖网站免费装修设计软件哪个好
  • 个人网站制作dw电子政务服务网站建设
  • 企业首次建设网站的策划方案手机网站商城建设答辩
  • 商河网站建设wordpress导航怎么设置主页
  • 企业网站硬件方面建设北京网站的制作设计
  • 网站开发 土木网站维护一年一般多少钱
  • 申请了域名怎么做网站建设校园门户网站方案
  • 友好酒店网站建设方案书开发公司网签价格
  • 如何上传视频到公司网站龙华、宝安最新通告
  • portfolio做网站rp网站自动跳转图片怎么做
  • 张家界做旅游网站中国建筑机械网
  • 娱乐网站建设网站制作 常见问题
  • 如何提高景区旅游网站建设科普类网站怎么做
  • dw可以做有后台的网站么上海建设工程协会网站
  • 企业网站手机端和pc端一个后台吗营销型网站建设xywlcn
  • 外贸网站做排名做一个关于电影的网页设计
  • 网站建设教程浩森宇特郑州做网站网络公司
  • 东莞网站域名注册山东平台网站建设平台
  • 福田做网站需要多少钱做标书有哪些网站能接到
  • 站长推荐网址入口自动跳转wordpress图片空间
  • 网站建设 电子商务 品牌首选IDC在线营销型网站
  • 有趣的网站官网网站建设店铺介绍怎么写