zoukankan      html  css  js  c++  java
  • django linux端脚本 web 可视化

    1、安装

    Django     # 大于2.0,小于2.1.5
    dwebsocket
    paramiko

    2、视图

    from dwebsocket.decorators import accept_websocket
    import paramiko
    @accept_websocket
    def show_log(request):
        # 判断是不是websocket连接
        if not request.is_websocket():
            # 如果是普通的http方法
            try:
                message = request.GET['message']
                return HttpResponse(message)
            except:
                return render(request, 'show_log.html')
        else:
            for message in request.websocket:
                # 接收前端发来的数据
                message = message.decode('utf-8')
                print(message)
                # 这里根据web页面获取的值进行对应的操作
                if message == 'backup_all':
                    # 这里是要执行的命令或者脚本
                    command = 'bash /home/lezhu/projects/ACG/test.sh'
                    # 远程连接服务器
                    ssh = paramiko.SSHClient()
                    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
                    ssh.connect(hostname=config.host_name, username=config.username, password=config.password)
                    # 务必要加上get_pty=True,否则执行命令会没有权限
                    stdin, stdout, stderr = ssh.exec_command(command, get_pty=True)
                    # 循环发送消息给前端页面
                    while True:
                        # 读取脚本输出内容
                        next_line = stdout.readline().strip()
                        # 发送消息到客户端
                        request.websocket.send(next_line.encode('utf-8'))
                        # 判断消息为空时,退出循环
                        if not next_line:
                            break
                    # 关闭ssh连接
                    ssh.close()
                else:
                    request.websocket.send('小样儿,没权限!!!'.encode('utf-8'))

    3、路由 省略

    4、模板(前段)

    {% extends 'base.html' %}
    
    {% block content %}
        <button style="margin: 20px;height: 40px;background-color: #337ab7; border-color: #2e6da4;" type="button" id="backup_all"
                value="backup_all">
            查看日志
        </button>
    
        <h3 style="margin: 20px;">脚本执行结果:</h3>
    
        <div id="messagecontainer" style="margin: 20px;">
        </div>
        <hr/>
    {% endblock %}
    
    {% block my_script %}
        <script type="text/javascript">
            $(function () {
                $('#backup_all').click(function () {
                    var socket = new WebSocket("ws://" + window.location.host + "/show_log/");
                    console.log(socket);
                    socket.onopen = function () {
                        {#console.log('WebSocket open'); //成功连接上Websocket#}
                        socket.send($('#backup_all').val()); //发送数据到服务端
                    };
                    socket.onmessage = function (e) {
                        {#console.log('message: ' + e.data);//打印服务端返回的数据#}
                        $('#messagecontainer').append(e.data + '<br/>');
    
                    };
                });
            });
        </script>
    {% endblock %}
  • 相关阅读:
    发现一个奇怪的问题: 不能把文件取名为 con
    博客园新购服务器硬件配置
    [重要新功能]团队Blog
    [庆祝]博客园已迁至新服务器
    [公告]博客园论坛开放注册
    博客园出现了奇怪的cookie问题
    [公告]博客园聊天室试运行
    [重发]请为你喜欢的博客园杂志的名字投上一票
    [征询意见]准备采用“创作共用”协议保护大家的原创作品
    博客园期刊制作小组Blog开通
  • 原文地址:https://www.cnblogs.com/wt7018/p/12660418.html
Copyright © 2011-2022 走看看